昨年末、日本最大級のRTAイベントRTA in Japan 2020に、Flashゲームテンミリオンで参加させていただきました。
また、それと並行してAdobe Flash Player終了後もテンミリオンを遊べるように、FlashエミュレーターRuffleでテンミリオンを動作させる方法を模索したりしていました。
何年もFlash存続のために取り組んでこられた方がいる中で、ちょっと作業したくらいで戦ったと言ったら怒られるかもしれませんが……。
結果としては、RTA in Japan 2020での走りにいい感想をいただけましたし、Ruffleをシフトアップネット様が正式に導入してくださった結果、初代テンミリオンを今もプレイできるようになりました。
せっかくなのでこの1年半ほどに取り組んだことを記事に残しておきます。
- 全てのはじまり
- 超人、参戦
- 更新の停滞、そして一度目のRTA in Japanへの申請
- サブカテゴリからメインカテゴリへの技術転用
- 敵軍AIの行動パターンの解明、そして迷い
- RTA in Japan Online 2020へ向けた布石
- 迫りくるFlash終了の足音
- Ruffle紹介記事の作成
- 操作面での革命
- RTAイベント「TAS好きの人たちがRTAでわいわいする」への参加
- All Dungeons 5 Membersの実現、そしてRTA in Japan 2020への申請
- テンミリオン終了の足音
- 複数のRTAイベントへの参加
- Ruffleの修正
- RTA in Japan 2020へ向けて
- RTA in Japan 2020本番
- RTA in Japan 2020が終わって
- 年末のAny%
- これから
全てのはじまり
2019年。Adobe Flash Playerの終わりが現実として目の前に迫ってきたとき、私はテンミリオンを遊んでいました。
テンミリオンは私が小学生の頃に流行っていたフリーゲームでした。当時、私も例にもれずテンミリオンをプレイし、友達とテンミリオンについて語り合い、二次創作作品を眺め、ネットにはアップしていなかったものの自分でイラストなども描いていました。
私たちの世代は最終版が公開される前のユーザーだったので、アップデートでクリア後マップが追加されたときなどは大いに盛り上がっていました。
そんな小学生の頃の思い出のゲームも、Flash終了とともに遊べなくなります。
リメイク版のテンミリオンZEROがあるとはいえ、今までも定期的に思い出してプレイしていた初代テンミリオンとは、もうお別れです。
そんな折、ふと自分が2010年ごろにテンミリオンのRTAを行っていたことを思い出しました。
当時の私はテンミリオンRTAをマリオ64RTAの息抜きとして行っており、大雑把に攻略方針をたてて通してみる、というようなレベルでしか行っていませんでした。
「テンミリオンは私が子供の頃人気があったゲームだし、様々なゲームのRTAが遊ばれる今の時代、きっとすごいことになっているはず。今あのRTAはどこまで詰まっているんだろう……?」
そう思って調べたところ、2019年9月時点でも競技人口は累計一人、当然世界記録は私という凄惨な状況でした。
当時の私の記録は22分26秒。
流石に私一人でも本気になれば10分は切れるだろうという自信はありました。*1
それでも正直、クリアターン数ランキング上位勢のようなやりこみ勢には勝てる自信はないので、私一人で満足いくくらいに詰めることはできないだろうと考えていました。
とはいえ、流石にこんなボロボロな記録がテンミリオンRTA最後の世界記録なんてテンミリオンで育ったRTA好きとしては許せません。
そこで、Twitterでテンミリオンに強いRTA勢に協力を求めることにしました。
ネット黎明期に人気を博したシフトアップネットのゲーム「テンミリオン」、HTML5でリメイク版は製作中らしいけどそろそろFlashがサポート切れてオリジナル版が遊べなくなるから、最後のRTA世界記録が私の22分26秒(競技人口1人)とかいうマジで終わってるクソガバガバ記録になってしまう前に誰か更新して
— 緑SM64 (@MidoriSM64) September 14, 2019
ここから全てがはじまったのです。
超人、参戦
先程のツイート自体は少しリツイートやいいねをいただきましたが、結果このツイートを見てテンミリオンRTAをはじめたという人はいませんでした。
テンミリオンは今でも熱心に二次創作をされている方もいらっしゃいます。RTAについても先述のRTA in Japanをはじめとした様々なイベントが開催されるなど、非常に盛り上がっています。
テンミリオンもRTAもやっている人は多いことは疑いようがありません。しかし、両方やっている人はいないのでしょう。なぜかは知りません。
そんなことをとあるDiscordサーバーでの通話で話していると、あるRTA走者兼TASERが「テンミリオンをやったことがある」といってくださいました。
「ちょっとアドリブで通してみるか。」
そして、ほどなくして……。
「16分台出たわ」
私「????????」
はい、完全なアドリブで私の記録を大きく更新してしまいました。
更に彼は数日後には8分19秒にまでタイムを縮めていました。
いや言ったよ?私も10分は切れる自信があるって。
でもこんな一瞬とは思わないじゃん?????
彼こそRTA in Japan 2020で解説を担当してくださったとりぽっぽ🚂💨さん。
RTA in Japan Online 2019ではからあげ名義でゼルダの伝説 大地の汽笛の解説もされていました。
かつてからあげやとりにくといった名前で活動していた彼は、はじめて手を出したハードのTAS*2で一線級のTASERが作っていたものを含む既存のWIP(制作中のTAS)全てを大幅に更新した上で「遅い」と言い放ち更に作り直すみたいな激ヤバエピソードを様々なゲーム*3で大量に持っている超人です。
彼の頭脳は凄まじく、例えば私も最強羽生将棋のRTAをしている都合上一応将棋で初段*4くらいはあるのですが、「駒の動かし方くらいしか覚えていない」と言う彼にボコボコにやられたことがあります。*5
私自身かなり弱めの初段とはいえ、有段者が駒の動かし方しか知らない人に平手で負けることってあるんだ……。
とにかく、彼の参戦でテンミリオンRTAは大きな進化を遂げることになります。
更新の停滞、そして一度目のRTA in Japanへの申請
その後、テンミリオンRTAはとりぽっぽ🚂💨さんによるチャート改善により、トントン拍子で7分35秒まで縮みました。(私はそれをただ眺めていました。)
これは当時としてはかなり速いタイムで、だいぶRTAらしくなったと思います。
そこでとりぽっぽ🚂💨さんが「ここまできたらRTA in Japanでテンミリオンをやりたい」といいだしました。
私としてもテンミリオン最後になにかしたい。なによりもとりぽっぽ🚂💨さんが作成した素晴らしいチャートは既に多くの人に楽しんでもらえる水準になっているという確信がありました。
しかし、年末のRTA in Japanは基本的に東京開催。とりぽっぽ🚂💨さんは西日本在住で、年末の遠出は家の都合上できないとのこと。
そんなわけで私がジェネリックとりぽっぽ🚂💨としてRTA in Japan 2019に申し込むことになりました。
実は私は元マインスイーパ勢でもあります。マインスイーパは初級〜上級の合計タイムが100秒を切ることがひとつのラインと言われているのですが、私はNF(旗なし)で93秒。マウス操作にもまあまあ自信はあります。
テンミリオンは乱数がないゲームで、チャート構築さえ完了したらあとはマウス操作能力の勝負。
マウス操作に特化したら私もとりぽっぽ🚂💨さんに勝てる!……と思っていたのですが、とりぽっぽ🚂💨さんはマウス操作もかなり上手かったので、なかなか彼のタイムを抜くことはできませんでした。
当時、特に敵軍フェーズを高速に終了させるための連打で私はとりぽっぽ🚂💨さんに劣っていました。
結局2位のタイムのままRTA in Japan 2019に申請、結果は落選。
翌年、続けて申請したRTA 1n Kagawa Onlineというイベントにも落選となりました。
サブカテゴリからメインカテゴリへの技術転用
ところで、テンミリオンにはAny%以外のカテゴリも存在します。
全ダンジョンを攻略するAll Dungeons、最少装備・最少メンバーでクリアするLow%、初期メンバー5人のみで全ダンジョンをクリアするAll Dungeons 5 Members、魔法を使わないで全ダンジョンをクリアするAll Dungeons No Magic、ジルバのみでクリアするThe Legend of Zelva*6などです。
とりぽっぽ🚂💨さんはAny%の合間に、最少装備・最少メンバーでクリアするLow%の研究に取り組んでいました。
装備が最少になるので、攻撃要員は一人のみ。強い武器やアクセサリーも捨てなければなりません。当然通常のAny%よりもターン数は大幅に増加します。
実際、このときLow%のターン数はAny%の1.7倍になっていました。
さて、彼が試しにLow%を通したところ、7分7秒という記録が出ました。
この当時のAny%の世界記録は7分24秒。あれ、Any%よりLow%のほうがはやい……。
元々ターン数以外にユニットの行動回数、攻撃回数などを考慮すべきだということはわかっていました。しかし、さすがにターン数1.7倍になって速くなるというのは想定外でした。
この出来事はその後のテンミリオンのチャート構築に大きな影響を与えることになります。
敵軍AIの行動パターンの解明、そして迷い
これまでテンミリオンのRTAはAny%(とにかく最速で魔王を倒す)だけでしたが、All Dungeons(全てのダンジョンをクリアする)というカテゴリもやりたいととりぽっぽ🚂💨さんがいい出しました。
しかし、All Dungeonsの複雑さはAny%の比ではありません。
より効率化するために、我々はテンミリオンの敵軍AIの行動パターンを完全に解明することにしました。
テンミリオンのAIの挙動を明確化し、かつ間違いがないことを確認するため、手元にテンミリオンのAIと同等の動作をするプログラムを作成しました。とりぽっぽ🚂💨さんが。
一応職業的には私がIT技術者、とりぽっぽ🚂💨さんは化学が専門の大学生なのです。それぞれが独立してこのプログラムを作成した結果、とりぽっぽ🚂💨さんのほうが先に実装を終えました。
彼は自身のIQを100くらいだといいますが、おそらくこれは16進数なのでしょう。
なお、この互換AIには、テンミリオンに対する理解を深める以外に、私が開発している最強羽生将棋RTAのチャート自動生成ツールをテンミリオンに応用することも視野にいれてのことでした。
結論から言うと、チャート自動生成ツールをテンミリオンに応用するプロジェクトは成功しませんでした。
しかし、この実装でテンミリオンの敵軍AIへの理解を深めたことで、このあとのチャート構築の精度・速度は飛躍的に向上しました。
とうとう現実的なAll Dungeonsのチャートを完成させることにも成功しました。
このとき判明したテンミリオンRTAのチャート構築についてコツは、主力以外の味方を囮として最大限の効果を発揮するように配置することです。
他にも経験値調整など様々な要素がありますが、それらについて詳しくはとりぽっぽ🚂💨さんによる記事を参照してください。
この頃、我々はテンミリオンに膨大な時間をかけており、そしてこの奥が深いゲームをAdobe Flash Playerのサポート終了までに極めることができないということは薄々わかっていました。
2020年末にFlashとともにこのRTAも終わると決めていたのですが、その決意は揺らいでいました。
RTA in Japan Online 2020へ向けた布石
RTA in Japanは例年冬のオフライン、夏のオンラインで年に2度行われます。 (2020年はコロナの影響で冬もオンラインとなりましたが。)
我々はこのRTA in Japan Online 2020で確実に採用されることを目指していました。
というのも、2020年冬はFlashの本当に最後の最後。
Flashゲームの応募が殺到することが予想できたからです。
RTA in Japanではあらゆるジャンルのゲームが応募され、その中から採用タイトルが選定されます。
そういった性質上、同じシリーズや同じジャンルのゲームが集中して採用されることは少なくなっています。
冬にはFlash最後にちなんで多少Flashの採用作品数が増える可能性があっても、それよりもFlash作品の応募総数の増加による競争率の上昇が予想できました。
少なくともRTA界隈での人気では、テンミリオンよりもくまのプーさんのホームランダービー!や四字熟語Flash、QWOP(Flash版)などのほうが上回るように見えました。
このあたりの作品との枠の奪い合いを避けるために、なんとしてもOnline 2020に採用されようという強い意志をもって挑みました。
まず、RTAの人口を増やそうと考えました。
RTAが盛り上がってたほうが魅力的に映りやすく、選考に有利だと思ったからです。
あと単純に好きなRTAの人口が増えてくれたほうが嬉しいというのもあります。
そんなわけでテンミリオンRTAのプレイヤー人口を増やすべく、Discordサーバーを作成しました。
とりあえず入ってもらって興味を持ってもらおうと思ったためです。
私は魅力を伝えた結果興味持ってもらって走ってくれれば嬉しいくらいに思っていたのですが(全体チャットで記録申請してくれると助かりますくらいは言ってたと思います)、割ととりぽっぽ🚂💨さんが割と個別に「走って」と声をかけてまわってたあたりに二人の方向性の違いが出ていたように思います。
結果、記録持ちの走者は4人にまで増えました。
この時参戦してくださった走者には、RTA in Japan 2020本番で英語解説を担当してくださったゲストCもちさんも含まれます。
また、それと並行してRTAの記録関連のサイトとして有名なspeedrun.comにテンミリオンを申請しました。
結果はまさかの未承認。Flashゲームだとプニキの前提もあるし、もっと人口の少ないゲームも通っているので何が悪かったのかはよくわかりません。
とりあえずspeedrun.comへは紹介の英文を練りなおして再申請するとして(そんなこといいながらいまだに再申請をしてません)、記録表を独自に作ることにしました。
そして出来上がったサイトがこちらです。
人は第一印象が意思決定に大きく影響するということもあり、HPのヘッダ画像はGoogle Siteデフォルトのままではなく自作イラストにしました。
なお、記録サイトのヘッダ画像もDiscordサーバーのアイコンも私が描きましたが、とりぽっぽ🚂💨さんのほうが絵は上手いです。
RTA in Japan Online 2019ではオンラインということもあり、とりぽっぽ🚂💨さんも参加可能です。そのため、私はとりぽっぽ🚂💨さん参加、私が解説という方向で提案しました。一方、とりぽっぽ🚂💨さんは「2人いるんだからレースでしょ」とレースを提案。
話し合いの末、私ととりぽっぽ🚂💨さんによるレース、解説はゲストCもちさんで申請することになりました。
しかし、その場のノリと勢いで私、とりぽっぽ🚂💨さん、ゲストCもちさんの3人レースで申請していました。
しかし、結果は落選。
これでRTAイベント3度目の落選となりました。
もうこうなったらイベントに出られようが出られまいが今年末までに詰められるだけ詰めるだけです。
迫りくるFlash終了の足音
話は前後しますが、2020年1月、ハム将棋やカードコマンダーなどの人気Flash作品を公開されていたhozoさんのサイトが閉鎖。有名な将棋ライターである松本博文氏がこれを記事にし、ネットニュースにもなりました。
こうしたFlash終了が目に見えて近づいている状況で、我々は具体的にテンミリオンの終了を回避する方法がないかを考えるようになりました。
一応私もIT業界に身を置くもの。Flashの代替手段がいくつか開発されていることは耳にしていました。
Lightspark、swf2js、そしてRuffle……。
Flashをオープンな技術に置き換えたい、Flashをより安全にしたい、そして消えゆくFlashを守りたい……。
それぞれのソフトウェアに関わっている開発者の皆様の思いは様々だと思いますが、これらのソフトウェアを開発されている方々には本当に頭が上がりません。
テンミリオンは比較的古いFlashゲームなので、比較的基本的な機能で実装されているはずです。
ならば、これらのソリューションで完全に近い動作ができるかもしれません。
そう思って試してみましたが、結果はどれも満足に動かず。
あのFirefoxを作っているMozillaがかつて開発していたShumwayなども、テンミリオンを動かすことは出来ませんでした。
「やはりFlash Playerを実用的な水準で再実装することは現実的ではないのか……。」
完全な部外者がこんなことを考えるのは失礼だとわかっていながらも、どうしてもそんな考えが頭をもたげます。
しかし、それからもいくつかのFlashゲームを定期的にこれらのソフトウェアで試していると 、その考えは頭から吹き飛びました。
特にRuffleの改善速度は顕著で、最初に試したときから数カ月後には当初動かなかったくまのプーさんのホームランダービー!が最低限動作し、それからすぐにハム将棋も動作するようになり、それらのゲームにおける細かな不具合も次々に消えていきました。
「これはひょっとすると、本当に多くのFlashコンテンツが動くようになるのかもしれない。」
私はFlashについてもRustについても素人だったので、Ruffleに直接貢献できるスキルは持ち合わせていませんでした。
しかし、それでもこの技術をできる限り多くの人に知ってもらい、Flashゲーム作者の方々まで届けることはできるかもしれないと考えました。
Ruffle紹介記事の作成
この当時、Flash作者様向けに日本語で書かれた記事には既に非常に質の高いものが存在していました。
Ruffleはその特性上、Flash作者の方がホームページ上に設置すればユーザーは何もせずにコンテンツを見ることが出来ます。
であれば、私ができることはFlash作者の方がこちらの記事へたどり着く動線を作ることです。
私は一般向けの記事を書くことにしました。一般のFlashユーザーの方にRuffleの情報を広めれば、自然とFlash作者の方の目に触れる機会が増えると考えたためです。
そうして作成した記事がこちらです。
結果として多くの方に読んでいただくことができましたが、記事の書き方については大きな反省点が2点ほどあったように思います。
まず1点目は、Appleを筆頭とするFlash排除派に寄った内容にしすぎたことです。
個人的には正直Appleの反Flashの主張は、もっともな部分もあるもののだいぶ無理のある部分も多いと思っています。
更に言うと、いかにセキュリティ上の問題があったとしても*7、代替技術もなく*8、更に古くからのコンテンツの保全なども出来ていない状況*9で強制終了するようなやりかたには正直私も思うところがありました。
ただ、ここで「Appleらの主張は一部こじつけです」なんて怒りをぶつけたところで信用は得られないと判断し*10、「Appleらの主張を全て事実として受け入れたとしても、Ruffleはそれらの問題のほとんど解決できる」という方針で記事を書きました。
結果としては、Appleの主張を検証することなく流した不正確な記事というもっともな批判を受けることになりました。
その後指摘された点を修正するも、そこらじゅうに追記が入り込んで大変読みづらい記事となってしまいました。
2点目は、要点を絞らなかったことです。
個人的には正直セキュリティの面さえ解決できれば一般ユーザーの立場としてはいったん大丈夫だと思っているのですが*11、多くの人がFlashのどこを問題だと思っているのかがわかりませんでした。
私はリアルで情報セキュリティの仕事をしていた際に、セキュリティ関係の仕事をしている人とそうでない方でかなり温度差があると感じました。
Flashに関しても、一般ユーザーのどれくらいがセキュリティに関心を持っているのか……。
そういう点からセキュリティのみならず色々な問題点について説明しました。しかし、記事を公開してから反響を見ると、ほとんどがセキュリティに関する意見だったのです。しかも私の記事の書き方が悪かったせいか、内容が伝わっていなさそうな声を多く見かけました。
多くの方がセキュリティに興味を持っているというのは素晴らしいことだと思います。そして、自分も一人のIT屋として、世間一般の認識をしっかり把握する必要があると痛感しました。
一応これらの問題について補足をいくらかしましたが、それらはあまり人の目に触れず。
Adobe Flash PlayerのエミュレータであるRuffle ( https://t.co/uGu3fGnw7N )が、本家Adobe Flash Playerのセキュリティ問題を解決できる理由 pic.twitter.com/vKXCn2x75m
— 緑SM64 (@MidoriSM64) 2020年12月15日
とにかくそんな理由から、この記事はあまり効果をあげられなかったように思います。
操作面での革命
さて、話はRTAに戻ります。
RTA in Japan 2020 Onlineの終了後、テンミリオンRTAサーバーに新たな記録が申請されました。
RTA in Japan運営スタッフでもあるyagamuuさんによる記録で、それまで1位だったとりぽっぽ🚂💨さんの記録を大きく更新するものでした。
yagamuuさんの記録を分析したところ、全体的に操作が速かったのですが、特に速かったのが敵軍フェーズ。
テンミリオンRTAでは敵軍フェーズをクリックの連打で飛ばすことができます。
テンミリオンの入力受付回数は12回。一般的な家庭用ゲーム機のゲームと異なり、毎フレームクリック判定を得ることができます。つまり、最大秒間12回の連打が可能です。
yagamuuさんととりぽっぽ🚂💨さんの差、そして私ととりぽっぽ🚂💨さんの差も大部分が連打力の差でした。*12
そこで、私はより連打をしやすい方法を研究することにしました。
研究中、とあるゲームの裏技を思い出しました。
有名なFlashゲームであるハム将棋には、タブキーとスペースキーを使って隠し手合に入る方法がありました。
これは、タブキーで画面外のクリック判定にフォーカスを合わせ、スペースキーでクリックイベントを起こすことで引き起こすことができます。
それならば、同じFlash製ゲームであるテンミリオンでもスペースはクリックの代わりになるかもしれない。
そう思ってテンミリオンのプレイ中にスペースを連打すると、見事に機能しました。
それを通話でとりぽっぽ🚂💨さんに報告。彼はスペースが押しっぱなしでも機能することを発見し、テンミリオンRTAに連打は必要なくなりました。
ハム将棋はFlash時代に将棋ユーザーを大きく増やして将棋界に大きく貢献しましたが、テンミリオンRTAにも影響を与えることになったのです。
とにかく、これまでは連打力の面で上位プレイヤーに大きく遅れを取っていた私も、この発見によりyagamuuさんやとりぽっぽ🚂💨さんにも引けを取らないプレイができるようになったのです。
RTAイベント「TAS好きの人たちがRTAでわいわいする」への参加
RTA in Japan 2020でテンミリオンに関わった私もとりぽっぽ🚂💨さんもゲストCもちさんもTAS製作者です。
そんなわけで(?)Discordの国内TASサーバーに参加しています。
そのTASサーバーで新たなRTAマラソンイベント「TAS好きの人たちがRTAでわいわいする」が開催されることになりました。
新興イベントかつ主催のお二人が小規模で自由なイベントを目指していたこともあり、比較的選考もゆるく、テンミリオンRTAが採用されることになりました。
このイベントへの参加が、テンミリオンRTAのイベント申請におけるひとつの転機になります。
我々はこのイベントにRTA in Japan Online 2020に申請したのと同じレース形式で参加しました。
しかし、実際参加してみて、周囲の反応がよくありません。
これはレース形式だったことが原因ではないかとの意見を主催の方からいただきました。
というのも、レースというのは二人分のプレイを同時に流すことになり、当然情報量は増大します。
そうなると、どうしてもゲームの解説が視聴者の頭に入らなくなってしまい、結果視聴者を置いてけぼりにしてしまいます。スーパーマリオ64のように見る人の大半がゲーム性を知っており、かつアクションゲームという比較的わかりやすい見せ場がある場合なら別ですが。
この経験から、これ以降テンミリオンRTAのRTAイベントへの応募は、一人が走者、一人が解説という形式が中心となります。
また、テンミリオンRTAの中心である二人の役割分担についてもはっきりしてきました。
並走の内容についてですが、とりぽっぽ🚂💨さんが秘密裏に作成していたAny%の新チャートを投入。既存チャートで走っていた私よりも優れた手順ではあったのですが、マウス操作の差で私が勝利しました。
この後、私はとりぽっぽ🚂💨さんの新チャートを更に改善したチャートを作成したのですが、その直後とりぽっぽ🚂💨さんはそれまでのチャートを大幅に変更したチャートを発表。
この後にも私がチャートに改善点を見つけるととりぽっぽ🚂💨さんが大幅な更新をして無に帰すということがありました。
この頃から、私はチャート研究よりも自分の強みであるマウス操作を極めることを中心として練習を重ねていきます。
また、とりぽっぽ🚂💨さんはなぜか使っているマウスがすぐ壊れる*13という特徴があります。並走からしばらくして、彼の買ったばかりのマウスが壊れてしまったために、記録狙いが困難になってしまいました。それをきっかけに、彼はチャート構築に専念するようになります。
こうして、チャート構築のとりぽっぽ🚂💨・マウス操作の緑SM64という分担が出来上がりました。
All Dungeons 5 Membersの実現、そしてRTA in Japan 2020への申請
テンミリオンのカテゴリの中でも、All Dungeons 5 Members、All Dungeons No Magic、The Legend of Zelvaについては、泥臭いレベリングなしに実現することが可能なのかが疑わしいものでした。
しかし、敵軍AIの行動パターンを完全に解き明かし、その後のチャート構築によって様々な知見を得た今、それらのカテゴリに挑戦することは現実的になりました。
まずとりぽっぽ🚂💨さんが手を付けたのはAll Dungeons 5 Membersでした。
結果として出来上がったチャートは、相手の行動パターンを完全に制した美しいものとなっていました。
ちょうどこの頃、年末のRTA in Japan 2020の走者募集が開始されました。
2020年はコロナ禍で、年末のRTA in Japan 2020もオンライン開催となったため、例年なら参加ができないとりぽっぽ🚂💨さんが解説として参加可能です。
我々は先のイベントで学んだことを参考に、走者緑SM64・解説とりぽっぽ🚂💨という布陣で挑むつもりでした。
RTA in Japanでは、1つのゲームにつき3カテゴリまで応募することができます。
本来ならば、我々がRTA in Japan 2020に応募するのは、以下の3カテゴリの予定でした。
・Any%…最も走者人口が多いため
・All Dungeons…全ステージ攻略というわかりやすいルールであるため
・All Dungeons 5 Members…チャート面で非常に見ごたえがあるため
しかし、実際に申請したのはAny%とAll Dungeons 5 Membersの2つ。
All Dungeonsを申請するにはある障害がありました。
というのも、とりぽっぽ🚂💨さんが新たに構築したAll Dungeons 5 Membersを、マウス操作に絞って練習を重ねた私が通した結果、All Dungeons 5 MembersのタイムがAll Dungeonsよりも短くなってしまったのです。
RTA in Japanでは申請時にEST(目安タイム)と記録動画が必要なのですが、この状況下ではAll Dungeonsが更に大幅に縮むことは間違いありません。だからといって募集締め切りまでにチャートを改善して通し直すことはさすがに無理そうでした。
そういうわけで我々はAll Dungeonsの申請を諦め、Any%とAll Dungeons 5 Membersのみに絞って応募することにしました。
しかし、RTA in Japan 2020 Onlineのときに予想したとおり、Flash作品の応募は大幅に増加。当選はかなり難しいのではないかと思っていました。
更に、RTA in Japan 2020の応募総数は過去最大。
それでも、本当にFlashはこれで最後。ここを逃したら次はありません。
説明文を最大限考え、解説付き動画も作成し、最大限テンミリオンRTAの魅力を選考者の方に伝わるように工夫したつもりです。
解説付き動画は慣れないYouTuber風の大きい文字が入ったサムネに挑戦しましたが、全然伸びませんでした。
それからしばらくして、RTA in Japan 2020当選発表の日。
テンミリオンは当選していました。
テンミリオンのメインカテゴリであるAny%が落選してAll Dungeons 5 Membersのみが当選するのは予想外ですが、イベント映えするのは後者だと思っていたのでベストな結果だったと思います。
ここからは年末までRTAの練習を続けるだけ……。そう思っていた我々の目に飛び込んできたのは、とある動画でした。
テンミリオン終了の足音
「シフトアップネットさんがこんな動画あげてるんだけど。」
とりぽっぽ🚂💨さんが私にある動画を見せてくれました。
それは「シフトアップネットを懐かしむ動画」というものでした。
この動画、そして説明文をみて、私はひとつの結論にたどり着きました――シフトアップネットさんは12月31日にFlashゲームの公開を終了しようとしている――
私はそれまでRuffleのことを広めて伝わればいいなというような、どこか他人任せの考えでした。
でも、それではダメでした。
直接シフトアップネットさんに連絡するにしても、この時点でテンミリオンはRuffleで動きません。他のシフトアップネットさんのゲームも何一つRuffleで正常にプレイすることは出来なかったのです。そんな中で連絡しても迷惑でしかありません。
であれば、やることはひとつ。
Ruffleでテンミリオンを動くようにするのです。
Flashの仕様に詳しくないだとか、Rustの知識がないだとか、もうそんな言い訳で逃げるわけにはいきません。
そもそも私は最強羽生将棋RTAのチャート研究のために将棋とプログラミングを覚え、そのままIT技術者になった身。*14ゲームが人を成長させるということを誰よりも身にしみて理解しています。
ゼロからプログラミングを覚えたことに比べれば、新しい言語や技術のひとつやふたつ、大したことはありません。
一方で、RTA in Japan 2020も過去最大倍率の選考を突破した以上、情けないプレイを披露するわけにはいきません。
Ruffleの修正とRTAの練習、両方を妥協なく行う。
我々の挑戦ははじまりました。
複数のRTAイベントへの参加
RTAイベントはRTA in Japanだけではありません。
11月から12月には我々はテンミリオンRTAで「TAS好きの人たちがRTAでわいわいする2」、「Flashお別れRTA会」にも参加しました。
これらのイベント、どちらも立ち上げ時に該当Discordサーバーにいたこともあり参加することにしたのですが、問題はカテゴリです。
とりぽっぽ🚂💨さんはRTA in Japan 2020申請時には完成させていなかったAll Dungeons No Magic――魔法が強力なこのゲームにおいて魔法を禁じるという超高難易度のRTA――のチャートを完成させていました。
また、このAll Dungeons No Magicにおける研究成果を反映し、Any%やAll Dungeonsの新チャートも完成しました。
とりぽっぽ🚂💨さんはこれらの新チャートをイベントで見せたいといいます。
しかし、テンミリオンRTAを行うにあたって覚えなければならない情報は案外多いのです。
自軍の操作手順はもちろんのこと、ターン開始時に最初に操作するキャラクターの座標、敵軍フェーズの行動順、終了タイミングなど……。
よって、短期間に様々なカテゴリでRTAを走るのは相当難しいのです。
しかし、これまでのとりぽっぽ🚂💨さんの働きがなければテンミリオンRTAがここまで発展することはなかったため、できる限り彼の意向は尊重したいところ。
私はTAS好きの人たちがRTAでわいわいする2にはAll Dungeons、Flashお別れRTA会にはAll Dungeons No Magicで参加しました。*15
まずはTAS好きの人たちがRTAでわいわいする2でAll Dungeonsを走りました。
こちらはミスは出たものの、大きく崩れることはなく、比較的順調に終わりました。
TAS好きの人たちがRTAでわいわいする2が終わった後は、Flashお別れRTA会の準備です。
Flashお別れRTA会は、Adobe Flash Playerのサポート終了前にFlashゲームのRTAを行うイベントです。
数々のFlashゲームのRTAを見ることができるので、Flashゲーム好きの方はアーカイブを見ると楽しめると思います。
私はこのイベントで主催の傘ネズミさんに事前に確認した上で、Ruffleの宣伝を挟ませていただきました。
このイベントは比較的視聴者の方が多くいらっしゃいましたので、大きな反響がありました。
少しでもRuffleを広めるお手伝いができたのかなと思います。
こちらのイベントにはAll Dungeons No Magicで参加しました。
All Dungeons No Magicのチャートは非常に綿密に練られており、直感に反する部分が多く、覚えるのが困難でした。
とはいうものの、直前には19分台が安定して出ており、仕上がりには自信がありました。
ただ現実は甘くなく、再走からの25分台という凄惨な結果に終わりました。
途中チャートが崩れたときに「テミ犠牲にしてみたいなアプローチでいけない?」と解説のとりぽっぽ🚂💨さんにリカバリ方法の確認を行うなど常識はずれのリカバリを行っていました。解説に聞くな自分の感覚を信じろ。
チャットでは「テンパリオン」という新語が生まれ盛り上がっていただけたようではあるのですが、主催や他の走者の方への影響を考えると申し訳ない気持ちが勝ります。
再走の機会を与えてくださった主催の傘ネズミさん、オワタ2の走者の後頭部さんには感謝してもしきれません。
なお、終わった後にさっと通したら18分台が出ました。
なぜこれを本番でやらない。
Ruffleの修正
RTAイベントへの準備だけでも忙しいのですが、それと並行してRuffleの修正も進めなければなりません。
この時点でRuffleには、日本語デバイスフォントの表示機能が備わっていませんでした。
この問題自体は既に不具合報告が挙がっており、Ruffleの主要開発者の方が「一時的にはフォントを差し替えれば解決する」と返信されていたことから、暫定的な対応版はすぐに作成できると思っていました。
すぐにとりぽっぽ🚂💨さんと共同で差し替え用フォントファイルの作成を行いました。
しかし、現実は甘くありません。
十分にテストされていなかった日本語文字の改行処理に不具合があり、フォントを日本語に差し替えてもエラーで終了してしまったのです。
私はすぐにRustの開発環境を整え、原因の究明にあたりました。
Rustでの開発作業ではとりぽっぽ🚂💨さんの助けを得ることが出来ません。彼のPCにはRustの導入に耐えられるほどの空き容量はなかったのです。*16
RTAの新しいカテゴリの練習を行いながら、Ruffleの不具合の原因を探る。非常にハードなスケジュールです。
このために有給も取得しましたし、仕事の昼休み中にRuffleのコードを眺め、Discordでとりぽっぽ🚂💨さんに連絡してテンミリオン側の実装を確認するというようなこともままありました。
そうして日本語対応版Ruffleを作成いたしました。
とりあえずRuffleに少し手を入れて日本語のデバイスフォント表示できるようになったので一旦置いときますhttps://t.co/rUXL25P9ih
— 緑SM64 (@MidoriSM64) 2020年12月14日
この記事を執筆している時点で、このとき修正した日本語関連の不具合は本家Ruffleでも修正されており、フォントの差し替えだけを行えば日本語表示が可能となっています。*17
そして、シフトアップネットのお問い合わせフォームから、Ruffleについての情報提供を行いました。
また、導入方法について日本語の説明も作成して共有いたしました。*18
この日本語フォントは棋譜ぺったんにも導入していただきました。
これでRTA in Japan 2020に専念……というわけにはいきませんでした。
これまで見落としていましたが、Ruffle上で動作するテンミリオンで特定のアイテムの取得時に、同じアイテムが複数入手できてしまうというバグが発見されたのです。
私はRuffle上でAny%クリアを行う上で、通常プレイの範疇では不具合が出ないことは確認していました。また、Any%の最中にアイテムを入手する処理は通っていました。
しかし、一部のアイテムだけ取得時に不具合が出るのです。
この問題の原因究明にもかなり時間がかかりましたが、なんとか原因を特定。慌ててこの部分を修正したバージョンを作成し、シフトアップネットさんに共有しました。
この内容については、RTA in Japan 2020で自分が走り終わった後にIssue*19として報告し、本家でも修正済みです。
RTA in Japan 2020へ向けて
さて、2つのイベントも終わり、Ruffleでテンミリオンが動くようになりました。
今度こそいよいよRTA in Japan 2020本番に向けての準備です。
とりあえず、告知ツイートをするためにイラストを描きました。
できれば私よりも絵がうまいとりぽっぽ🚂💨さんに描いていただきたかったのですが、彼も忙しかったので私が描くことになりました。*20
私はAll Dungeons 5 Membersに特化して、マウス操作を最適化したり、細かなチャートの改善を行ったりしていました。
プレイの精度が高まってくる中、私の右手に違和感が生じます。
プレイの精度が上がれば上がるほど、細かいマウスの操作を高速に行うスキルが身につき、結果として右手への負担はどんどんあがっていたのです。
時系列的には、右手の違和感はRuffleの修正している時期に重なります。
定期的に休憩を取る必要があったので、RTAとRuffleのコードリーディングを交互に行っていました。
また、RTA以外の作業でも、できる限り左手でタイピングしたり、仕事でもできる限りタイピングの必要の少ない作業を先に行うようにしていました。
英語解説については、テンミリオン走者であるゲストCもちさんに依頼しました。
急な依頼にもかかわらず、ご対応いただき幸いです。
このときの英語解説についてはゲストCもちさんがブログにまとめられています。
解説についても、私ととりぽっぽ🚂💨さんとゲストCもちさんで事前に通話をしながら予行演習を行うなどして内容をすり合わせていきました。
こうして、各種の準備を万端にして、本番に挑みました。
RTA in Japan 2020本番
RTA in Japan 2020では、直前のTerrariaが機材トラブルによりすぐに配信開始するのが難しかったことから入れ替えとなり、急に出番がやってきました。
いきなりで私も配信開始にやや手間取ってしまいました。
本番は緊張で手が震え、普段しないようなミスも出てしまったものの、タイム自体は悪くなかったと思います。
走りと関係のない反省点としては、元々Webカメラの画面レイアウトを4:3前提で作成していたのですが、本番がはじまってみると16:9だったので、上下がトリミングされてしまいました。
結果として、配置していたものを走り始める前に無理やり見せるようなことになってしまったのはよくなかったですね……。
皆さんは事前にレイアウトの確認をとりましょう。
RTA in Japan 2020が終わって
さて、長いようで短かったテンミリオンRTAのRTA in Japanへの出場もこれで終わり。
正直、かなりキャラクターを囮にしたりとプレイングに倫理観がないRTAなので、テンミリオン好きの方に受け入れていただけるかは本当に不安でした。結果として、テンミリオンRTAはテンミリオン好きの方にも割と受け入れていただけたようで本当によかったです。
私がRTAを走ったことでみなさんが描いてくださったイラストなどもあり、これらは本当に励みになりました。
ごま油 on Twitter: "先日のテンミリオンRTA、録画を見られることを知り今見てきたのですがこんな感じでした… "
⛩むー⛩ on Twitter: "これはテンミリオンRTA配信者クロウくん〜妹さん乱入事故回〜… "
また、Discordのテンミリオンサーバー上で反省会を行っていたところ、テンミリオン好きの方々が入ってきてくださったのは本当に嬉しかったです。
テンミリオンは本当に愛されているゲームなのだなと改めて思いました。
テンミリオンRTAの出番が終わって、我々は最後の作業に取り掛かりました。
まずは、Ruffle本家へこちらの修正内容を共有しました。
そして、RTA in Japan 2020で走ったAll Dungeons 5 Membersを更新。
そして、Adobe Flash Playerでテンミリオンが動く期間の最後のRTAに取り掛かりました。
年末のAny%
テンミリオンRTAでやりのこしたことはたくさんあります。
イベントで大事故を起こしたAll Dungeons No Magic、結局誰も完走できなかったThe Legend of Zelva、そして10分切りの大台が見えていたAll Dungeons……。
しかし、私はその中でもAny%を行うことにしました。
限られた時間の中ではAny%のような短いカテゴリでないと詰めきれないというのも理由ですが、他にも理由はあります。
テンミリオンRTAはAny%にはじまりました。
であれば、Flash最後までにどこまでテンミリオンRTAが進化できたのか。その指標としてAny%はぴったりでした。
そして大晦日。
私はとうとうAny% RTAでジルバをクビにすることに成功しました。
RiJ見ながらテンミリオンのチャート研究をしていたところ、今までAny%では最初のステージでのみダメージ調整役として活躍していたジルバさんが最初からクビになりました。Flash最終日までギリギリ耐えられませんでした。よろしくおねがいいたします。
— 緑SM64 (@MidoriSM64) 2020年12月31日
最後の最後で大きなチャート更新ができたとよろこんでいたところ……。
同じ日にジルバとマゼンダをクビにしましたたいありでした https://t.co/qaBRWrOlzv
— みずほのとり🚂💨@🌙水鳥☀️ (@toripoppo0307) 2020年12月31日
とりぽっぽ🚂💨さんは更にマゼンダもクビにしていました。
結局最後までこの人には勝てないのか……。
そこからはブロントの位置を変えて被ダメを調整したり、敵の索敵範囲に入るのを遅らせて行動回数を減らしたりと細かな変更が続きました。
我々は2020年最後までAny%を詰め続けたのです。
大晦日のテンミリオンRTA勢 pic.twitter.com/rjCIBY17vW
— 緑SM64 (@MidoriSM64) January 1, 2021
結果、微妙に年を越してしまいましたが、4分を切ることが出来ました。
本格始動からわずか1年半、テンミリオンRTAは1/5.6にまで縮んだのです。
記録推移を表にするとこんな感じです。
達成日付 | タイム | プレイヤー |
2010/03/20 | 00:22:26 | 緑SM64 |
2019/09/20 | 00:16:11 | とりぽっぽ🚂💨 |
2019/09/24 | 00:08:19 | とりぽっぽ🚂💨 |
2019/09/28 | 00:07:35 | とりぽっぽ🚂💨 |
2020/04/06 | 00:07:24 | とりぽっぽ🚂💨 |
2020/04/18 | 00:05:55 | とりぽっぽ🚂💨 |
2020/06/20 | 00:05:28 | yagamuu |
2020/08/01 | 00:05:01 | とりぽっぽ🚂💨 |
2020/09/13 | 00:04:55 | 緑SM64 |
2020/10/10 | 00:04:49 | 緑SM64 |
2020/10/10 | 00:04:36 | 緑SM64 |
2020/10/10 | 00:04:20 | 緑SM64 |
2020/11/03 | 00:04:16 | 緑SM64 |
2021/01/01 | 00:03:57 | 緑SM64 |
最後の最後(微妙に遅刻)に4分切りというキリのいいタイムを出し、達成感に包まれました。
これから
年が明け、テンミリオンのFlashページは終了し、公式のRuffle版が公開されました。
スペシャルサンクスに私ととりぽっぽ🚂💨さんの名前も入れていただいています。
しかし、これで終わるつもりはありません。
もちろん去年まではやることを後回しにして時間を捻出していたので、今年も同じペースというのは無理ですが、これからもテンミリオンを遊ぶつもりです。
シフトアップネットさんが公開されたゲームには、テンミリオンの自作マップを投稿できるテンミリミッションというゲームもあります。
現時点のRuffleではこのテンミリミッションのタイトルは文字化けしてしまいます。
この部分の調査、改修をはじめ、Ruffleに微力ながら貢献できたらと考えています。
また、テンミリオンのAll Dungeonsはもうすぐ10分を切れそうなところまできています。Ruffle版でこれに取り組んでいきたいと考えています。
The Legend of Zelvaなどのまだ通せる人がいないカテゴリも同様ですね。
頓挫したRTAチャートの自動生成ツールについても、開発を再開したいと思っています。
他にも、テンミリオンのリメイク作品であるテンミリオンZEROのRTAもやってみたいと思っています。
敵AIの行動パターンは比較的近いのですが、クリア後の敵が恐ろしく強く、All DungeonsやMax%ではより高度な戦略が求められることでしょう。
RTA以外では、本家テンミリオンの省ターン数ランキングにも興味があります。
RTAで得た知識はターン数を削ることにも役に立つはずです。
これら全てが実現できるとは限りませんが、私達はこれからもテンミリオンで遊び続けます。
*1:少なくとも地元ではうまい部類に入ったと思います。友人がクリアできなかったファイアーエムブレムのステージをテンミリオンの経験だけを頼りに攻略しかけた(門限で帰宅)こともあります。しかし地元でブイブイいわせていてもネットの世界は広く……。
*2:Tool-Assisted Speedrun。ツールを使用したタイムアタックのこと。速いものを作るにはゲームに対する深い理解と広範な知識、発想力が必要になります。
*3:彼がこれまでにプレイしたり関わったりしていたゲームはゼルダの伝説 大地の汽笛、ゼルダの伝説 風のタクト、スーパードンキーコングシリーズ、スーパーマリオサンシャイン、ピクミンシリーズなど。ちなみに以前ブログで紹介した2020年に最強羽生将棋のRTAに参戦予定の強い人とは彼です。結局我々は1年以上テンミリオンに熱中していたので今年こそがんばります。
*4:将棋ウォーズの10切れ段位。一応日本将棋連盟公認サイトなので、この段位で日本将棋連盟から免状を発行してもらうこともできます。棋神は登録直後に使ったくらいで、ここ数年不使用。ウォーズの段位の基準は緩めとはいえ、一応偏差値で言うと60くらいあるらしい。当然この偏差値は将棋ウォーズをやってる人(=将棋をある程度やってる人)の中でなので、初心者に負けることは通常はありえません。
*5:経験や知識が物を言う序盤では確かに初心者の指し回しなのですが、中盤以降の読みである程度損得がわかるようになった瞬間突然滅茶苦茶正確になります。私は将棋AI水匠2-やねうら王5の評価値にして3000の局面から逆転されました。相手が初心者ということもあり決着を不用意に急いだ部分はあったものの、決めそこねて一度冷静になった時点でもまだこちらが2000点以上リードしていました。そこからは一切の油断はありませんでした。こっちも時間を使って読みをいれていた都合上、大ミスで一発死みたいな感じでもなく、全てを正確に対処されてじわじわと逆転された感じです。読みが正確なコンピュータは評価項目を駒の損得だけにしても中終盤は鬼のように強いといいますが、頭がいい人間の初心者にも同じことが言えるようです。なお、彼については将棋以外にもっと適切なエピソードはあるものの、強すぎて私以外にも飛び火しちゃうので割愛。
*6:元々はSilver%という名前でしたが、テンミリオンZERO英語版でジルバの正式な英語名がZelvaであることがわかったためこの名前に変更となりました。
*7:実際Flashの脆弱性はドライブバイダウンロード攻撃などに広く使われており、かなり問題となっていました。
*8:彼らは標準WEB技術が代替になると主張していますが、小規模な動的コンテンツを見かけることが減り、以前ならちょっとしたFlashで済んでたアニメーション広告が動画広告に置き換えられ帯域を圧迫しまくっている現状のどこがFlashを代替できているのかを教えてほしいところです。マンパワーとマシンパワーが無限にあれば確かに同じことはできるかもしれませんが。
*9:当初はFlashからHTML5+JSに変換できるようにするツールなどを開発していた関連企業・団体もありましたが、結局フェードアウトしました。もちろんそれによって一部コンテンツは移行されたので部分的には効果はあったのですが。
*10:記事中でAppleが批判する概念の実例としてApple AppStoreを挙げてるのは怒りを抑えきれなかった結果です。
*11:もちろん標準化された技術のほうがありがたいというのはIT業界の人としては思います。みんな実装の多様性を確保するためにChromeだけじゃなくFirefoxを使いましょう。ただうちの環境のFirefoxだとRuffleがなんかもたつくのでFlashコンテンツを遊ぶときはChromeのほうがいいかもしれません。でもとりぽっぽ🚂💨さんの環境だと逆にFirefoxのほうが軽いらしいのでよくわからん。
*12:私の連打はトップスピードであればとりぽっぽ🚂💨さんよりも速いのですが、マウスを握った状態ですぐにフルスピードの連打に移る技術はなく、総合的にはとりぽっぽ🚂💨さんのほうが上でした。
*13:彼は耐衝撃性の高いマウスを求めています。有線しか認めないそうです。ご存知の方は教えてあげてください。
*14:正確には最強羽生将棋TAS/RTAのチャート自動生成ツールを本格的に開発しはじめたのは情報系に進んでからであるものの、最強羽生将棋をモチベーションにして勉強をして学年でも上位の技術力を身に着けました。
*15:この月、私はとりぽっぽ🚂💨さんが主催するゼルダの伝説 大地の汽笛 11周年記念 新生ハイラルウォークラリー大会にも参加しました。とりあえず申請してほしいといわれて参加申請をしたのですが、テンミリオンやRuffleの開発に時間を取られていたためこちらについては事前練習ゼロ、食事抜きで参加した結果悲惨なプレイを披露してしまいました。ご視聴いただいた方、申し訳ありませんでした。
*16:ほかの理由として、彼は宗教上の理由でRustを使うことができません。彼は静的型付け至上主義者であり、型を強く信仰しています。変数の宣言時に型が行頭にこない言語を受け付けないのです。更に、彼は型推論をも嫌っており、クラスベースオブジェクト指向至上主義者でもあるため、型推論を多用する上にクラスが存在していないRustは彼にとって静的型付け言語の中では最も受け入れがたい言語のひとつでした。
*17:これは私が報告した結果ではなく、同様の不具合をほぼ同時期に別の方が報告されたことがきっかけで修正されたようです。
*18:とはいえRuffleの導入は既存のHTMLを使い回すことができて非常に簡単なので、大掛かりな手順書は必要なかったのですが。
*19:#2166
*20:彼は人間が描けないと言っています。よくわかりません。