Morrowindプロゞェクト

画像






Morrowindをプレむする必芁がありたす。



譊告ここにMorrowindぞの称賛のいく぀かの段萜があるので、それらを安党にスキップしお投皿の本質に進むこずができたす。



Morrowindの初めに、あなたはポケットに87個の金を入れお刑務所の船から降りたばかりの普通の衝撃を䞎えたすこの䞖界では、パン1杯は金1個、玄35ポンドです。 。 あなたの最初の仕事は、別の郜垂の人から荷物を受け取るこずであり、シルト・ストラむダヌ長い脚を持぀巚倧な昆虫、おそらくロンドンのバスのように氞遠に酔った䞍気味な運転手によっお運転されるに乗るこずができたす囜勢調査局から匕き抜いた鉄の短剣で生い茂った猛犜類の倧矀ず戊う。 Morrowind戊闘システムの䜜成者はボヌドロヌルプレむングゲヌムに觊発されおおり、アニメヌタヌはあたりお金を払っおいなかったので、あなたの短剣だけが垞に芋逃しおいるので、あなたの歊噚が明らかにあなたのプレヌダヌの肉䜓に刺さっおいおも、実際にヒットするこずを保蚌したす。



そのため、数千回の猛烈なクリックによりマりスを数匹砎壊するず、Morrowindを終了し、もっず面癜いこずに人生を費やすこずになりたす。



たたは、プレむを続けお、疲劎が誰かを叩くそしお誰かを叩くチャンスにどのように圱響するかを調べ、ゲヌムの仕組みを調べ、新しいマりスを賌入し、バルモラに行き、私が持っおいる最も豊かな䞖界の1぀に飛び蟌みたすゲヌムで芋られる。 あなたは、組織化された宗教、倖囜人嫌悪、怍民地䞻矩、郚族の䌝説、予蚀、自由意志、そしおあなた自身の利益ずあなたが属する組織の利益ずの間の優先順䜍の遞択に関する質問を提起する物語を生きたす。



そしお、この研究の過皋のどこかで、あなたはあなたのスロップ短剣の波がもはや通り過ぎないこずに気付きたす。 実際、短剣はもはや傟斜しおいたせん。 実際、あなたはもはや短剣を䜿甚しおいたせんが、恐らく性的に動機づけられ、非垞に危険な生き物であるカップルに守られおいるダンゞョンで玠晎らしい剣を芋぀けたした。 あなたは神を殺し、神の魂を奪うこずに決めたした。 荒れ地を長く歩き回るのではなく、どこかに行く必芁がある堎合は、唯䞀のお守りを䜿甚しお最寄りの寺院にテレポヌトし、バニヌホップゞャンプを行うより速く移動するこずが刀明したためか、郜垂に浮䞊し、メむゞズギルドに行き、テレポヌトを䜿甚したすギルド、別のお守りを適甚し、最終的に正しいポむントに到達したす。 麻薬䞭毒では、喜びのために郜垂党䜓をカットし、最埌のセヌブをロヌドしたす。 グレヌトハりスの宝物を奪い、珍しい鎧や歊噚を盗んで遠くの島に行き、巚倧なカニに売りたす。 あなたはそれが最良の䟡栌を提䟛するためにそれを遞んだず蚀いたすが、実際には他の誰もがあなたを恐れおいたす。



すべおが実生掻のようです。



ゲヌムの賞賛はここで終わりたす。



最近、Morrowindを再プレむするこずにしたした。高いランクを獲埗する途䞭で、ギルドで昇栌するために完了する必芁のある「アむテムを持ち蟌む」ずいう絶え間ないク゚ストに少しうんざりしおいたした。 そこで、ルヌトプランナヌを䜜成するこずを考えたした。 Morrowindのアクションオプションの数は非垞に倚いため、これは簡単なタスクではありたせん。











リングラむンにサメが出珟するため、わずかな遅延が予想されたす。



これらのツヌルを組み合わせるず、どのような面癜い移動方法が発生するかを理解できたす。 たずえば、Almsivi Interventionをキャストしお最も近い寺院にテレポヌトし、次にDivine InterventionでImperial Fortにテレポヌトし、ギルドテレポヌトを䜿甚しおすぐに別のAlmsiviをキャストしお別の郜垂に入れるこずができたす。



しかし、もちろん、これらのMorrowindディスプレむスメントマップを読み取り、グラフを䜜成し、Dijkstraのアルゎリズムを実行するのに少し時間を費やしただけでは退屈です。 たず、このような良い投皿は機胜したせん。 第二に、もし私たちが荒れ地のどこかにいたずしおも助けにはなりたせん䞭倮のファラスマリオン、バレンバリオン、ロザラン、むンドラニオン、ファレンサラノ、アルドルヌン、マヌルガンに囲たれたこの゚リアをご芧ください 



最埌に、私はあなたに嘘を぀いたので、 Tamriel Rebuiltを含むいく぀かのかなり倧きなファンがMorrowindに远加されたした。実際、この島はMorrowindではなくVvardenfellず呌ばれ、MorrowindはVvardenfellが属する州です。 Tamriel Rebuiltの䜜者は、この州党䜓を再珟しようずしたしたはい、MorrowindはすべおMorrowindずいう名前でゲヌムに参加したせんでした。さらに、TamrielはMorrowindが属する垝囜党䜓であり、はい、Tamriel RebuiltはMorrowindず呌ばれたす。 



私たちの人生を簡玠化するために、ゲヌムファむルからこのデヌタを抜出する䜓系的な方法を芋぀けるこずをお勧めしたす。 これを行うず䜕がわかるか想像しおみおください 人口統蚈 人口のヒヌトマップ カりント 䟡栌ず動きのグラフも䜜成できたす



Morrowindプロゞェクトの次の郚分では、玛らわしいバむナリ圢匏、奇劙な仮定、線圢代数、Python蚀語ず戊い、おそらくMorraindの䌝承ずそのゲヌムの仕組みに぀いおさらに孊習したす。



パヌト2



Morrowindプロゞェクトの埌半では、ひどいバむナリをPythonむンタヌプリタヌのメモリ空間で矎しいデヌタ構造に倉換し始めたす。 技術的には、ずにかくバむナリデヌタのたたですが、それほど深くは行きたせん。 そうでなければ、私たちはすべおが原子で構成され、実存的危機があり、それには䜕も良いものがないこずを認識したす。









私は...私もコヌドを芋たせん。 朚材、石、湿地のonlyだけが芋えたす...



デヌタダンプ



MorrowindずそのフォロワヌOblivion、Skyrim、Fallout 3および4を含むを含むBethesda Softworksによっお䜜成されたElder Scrollsシリヌズのゲヌムでは、ゲヌムの基本デヌタ぀たり、テクスチャではなくマップず異なるオブゞェクトの堎所/サりンド/モデルはESM圢匏Elder Scrolls Masterで保存されたす。 Morrowind以来進化しおきたBethesda開発者は、たすたす倚くの機胜を远加したしたが、基本的な考え方は倉わりたせん。これらのファむルはさたざたなタむプのレコヌドのコレクションです。



たずえば、性別、人皮、AIキャラクタヌの行動などの定矩を含む、ゲヌムのキャラクタヌを識別するNPC_レコヌドがある堎合がありたす。 たた、ARMOおよびWEAP゚ントリを参照するキャラクタヌのむンベントリなど、他の゚ントリぞのリンクを含めるこずもできたす。 CELLレコヌドは、ゲヌム内のセル堎所自䜓を蚘述し、NPC_、ARMO、WEAP、CONTチェストなどのコンテナヌなど、このセルに含たれるすべおぞのリンクを含みたす。 ここではMorrowindバむナリ圢匏に぀いお詳しく説明したす 。Bethesdaゲヌムの新しいリリヌスはすべお、ゲヌムデヌタファむルの圢匏の小さな倉曎をリバヌス゚ンゞニアリングするための倚くの興味深いタスクをプレむダヌに玄束したす。



Bethesdaは、この圢匏のゲヌムデヌタファむルにゲヌムセヌブファむルオヌバヌレむを䜜成するずいうスマヌトなアむデアを思い぀きたした。 たずえば、特定の堎所゚ルダヌスクロヌルシリヌズのゲヌムでよく発生したすで誰かを殺した堎合、保存されたファむルには、察応する殺されたNPCを瀺すCELLレコヌドのオヌバヌラむドが含たれたす。 残念ながら、このアむデアは、他の倚くの賢いアむデアのように、私のプロゞェクトにはたったく圱響したせんでしたが、それでも興味深いものです。



ただし、他にも問題がありたす。セルは倖郚でも内郚でもかたいたせん。 倖偎のセルは正方圢で、端から端たで互いに接続されおおり、Morrowindの芋事なオヌプンスペヌスを䜜り出しおいたす。 内郚セルには別の話がありたす-それぞれが独自の小さな珟実にあり、ドアによっお他のセルに接続されおいたす。ドアはここでは基本的にテレポヌトずしお䜿甚されたす。 倖偎のセルにある小さな家は内偎からはるかに倧きいこずが倚いため、プレむダヌが内偎に入ったずきの䜍眮を確実に刀断するこずはできたせん。



したがっお、Morrowindを移動する方法のグラフを再䜜成する堎合は、ドアを移動する別の方法ずしおそれを考慮する必芁がありたす。



Almsivi / Divine Interventionスペルに関しおは、すべおのテンプルずむンペリアルフォヌトに特別なマヌカヌオブゞェクトがありたす。これにより、ゲヌムは特定のスペルをキャストするプレむダヌをテレポヌトする堎所を決定したす。 これは、マヌカヌが屋内にあるため倖郚セルでも簡単ですが、内郚セルの堎合は耇雑です。 Morrowindはプレむダヌが最埌にいた倖郚セルを䜿甚するず䞻匵する人もいたすこれは病理孊的ケヌスに぀ながるこずがありたす-たずえば、ギルドテレポヌトを䜿甚しお郚屋から郚屋ぞテレポヌトしたす。その埌、介入呪文を唱えるず、マヌカヌの近くに移動したす最初のギルドであり、2番目のギルドではありたせん、オヌプン゜ヌスのMorrowind゚ンゞンであるOpenMWの実装では 、プレヌダヌに最も近いセルを参照ずしお䜿甚しおこの問題を解決しようずしおいたす。 䜕らかの理由で、Morrowindのコピヌが正しく動䜜しおいるため、この動䜜をシミュレヌトしたす。



NPCが茞送サヌビスシルトストラむダヌ、ボヌト、たたはギルドテレポヌトを提䟛しおいる堎合、これはそのレコヌドに゚ンコヌドされるこずがはるかに優れおいたす。



䞀般に、必芁なものがすべお含たれおいるため、CELLおよびNPC_レコヌドからすべおを取埗する必芁があるようです。



CELLおよびNPC_レコヌドからすべおを匕き出す



このすばらしい仕様に埓っおバむナリデヌタをデコヌドするこずは完党に可胜で興味深いず思いたしたが、䜎レベルのESMファむル゚ディタヌであるMorrowind Enchanted Editorをごたかすこずにしたした。 特に、「テキストファむルにダンプ」機胜を䜿甚したした。この機胜は、読み取り䞍可胜なバむナリカオスをASCII読み取り可胜なカオスに倉換したす。









トッド・ハワヌド自身が䜜成したず思われるトッドのスヌパヌテスタヌ・ガむに䌚いたしょう。



すでにこれを䜿甚できたす。レコヌド内の各芁玠は個別の行にあり、サブレコヌドの圢匏のキヌを持っおいたすたずえば、FNAM-フルネヌム、RNAM-レヌスの名前など。 たず、NPC_およびCELLレコヌドのみを抜出し、デヌタをトヌクンに倉換し、それらをキヌず倀のペアのストリヌムに倉換したす぀たり、NPC_NAME todd文字列はタプルNAME、toddになりたす。゚ントリを参照NPC_。



ここでは、゜ヌスコヌドをブロックごずに衚瀺しお説明しおいたしたが、今日はWordPressが私に反するこずが刀明したした。埌でGitHubで公開するこずをお玄束したす。 amp; gt



その結果、同様の結果が埗られたす。



In [6]: cells[:10] Out[6]: [('NAME', ''), ('DATA', '\x02\x00'), ('DATA', '23'), ('DATA', '7'), ('RGNN', "Azura's Coast Region"), ('NAME', ''), ('DATA', '\x02\x00'), ('DATA', '23'), ('DATA', '6'), ('RGNN', "Azura's Coast Region")] npcs[:10] Out[7]: [('NAME', 'player'), ('FNAM', 'player'), ('RNAM', 'Dark Elf'), ('CNAM', 'Acrobat'), ('ANAM', ''), ('BNAM', 'b_n_dark elf_m_head_01'), ('KNAM', 'b_n_dark elf_m_hair_01'), ('NPDT', '1'), ('NPDT', ''), ('NPDT', '')]
      
      





NPC_゚ントリのストリヌムをNPCリストに解析するこずは、それほど難しいタスクではありたせん。 最も簡単な方法は、ストリヌムをクラスのコンストラクタヌに枡し、そこから初期化に必芁なものをすべお読み取らせるこずです。 ただし、次のNPCのNAMEサブネヌムが衚瀺されたら解析を停止する必芁があるこずを忘れないでください。すでに䜿甚しおいる堎合はすでに遅すぎるため、䜿甚せずに次の芁玠を参照できるむテレヌタを定矩する必芁がありたす。



聖杯を探しおいる堎所のリストを解析するこずも非垞に簡単です-この䟋を芋おくださいこれはトッドのスヌパヌテスタヌガむが私たちを提䟛できる堎所の1぀です



 NPC_ DODT 1822.641 NPC_ DODT -231.5323 NPC_ DODT -292.9501 NPC_ DODT 0 NPC_ DODT 0 NPC_ DODT 0.5 NPC_ DNAM ToddTest
      
      





文字通り、x、y、z座暙および角床これは重芁ではありたせんの6぀の数字のリストを取埗したす。 内郚セルにいる堎合、DNAMサブレコヌドが存圚するこずがありたす。



reprメ゜ッドを远加するず、NPCのリストが衚瀺されたす



 npcs[:10] Out[15]: [NPC (player, player, Dark Elf, Acrobat), NPC (todd, Todd's Super Tester Guy, Dark Elf, Guard), NPC (Imperial Guard, Guard, Imperial, Guard), NPC (agronian guy, Tarhiel, Wood Elf, Enchanter), NPC (murberius harmevus, Murberius Harmevus, Imperial, Warrior), NPC (madres navur, Madres Navur, Dark Elf, Acrobat), NPC (farusea salas, Farusea Salas, Dark Elf, Commoner), NPC (erval, Erval, Wood Elf, Commoner), NPC (Dralas Gilu, Dralas Gilu, Dark Elf, Rogue), NPC (uulernil, Uulernil, High Elf, Smith)] npcs[1].inventory Out[16]: [('steel battle axe', 1), ('glass war axe', 1), ('steel mace', 1), ('chitin guantlet - right', 1), ('chitin guantlet - left', 1), ('chitin boots', 1), ('chitin greaves', 1), ('chitin pauldron - right', 1), ('chitin pauldron - left', 1), ('chitin cuirass', 1)]
      
      





興味深いこずに、タルピルずいう名前の「アグロニア人」には3぀の問題がありたす。最初に、圌の皮族の名前はアルゎニア語ず正しく綎られおいたす。次に、圌はアルゎニア人ではなく、森の゚ルフです。圌には粟神的な問題がありたすが、胜力もありたす 。



次に、CELLデヌタのデコヌドに進みたす。CELLデヌタには、他の興味深いポむントがありたすたずえば、プレむダヌが知芚できるほずんどのデヌタが含たれおいるなど。 しかし、私たちはすでに基本ず最も退屈なこずに぀いお話したしたので、より速く動き始めお、動きの本圓のグラフを䜜成するこずに取り掛かりたしょう



パヌト3



今日、Morrowindプロゞェクトでは、矎しい写実的な䞖界で3Dシヌンの説明を芖芚化するプロセスを数十幎かけお研究し、それらをゎミ箱に捚おたす。









最埌に、WordPressで重芁なフォヌマットを詊しおみたした。 圌が少なくずも写真の䞭のテキストを台無しにしないこずを願っおいたす。



セルデヌタの読み蟌み



Morrowindセルの解析にはいく぀かの課題がありたす。 1぀目は、セルに䞀意の名前を付ける方法です。 内郚セルの堎合、「Uncle's Workshop Sweet Share」などのNAMEフィヌルドがあるため、これは簡単ですこれは冗談ではありたせん 。 ただし、倖郚セルには玄3぀の異なるタむプがありたす。 1぀目は、写真のような郜垂ず泚目すべきランドマヌクです。 RGNN、NAME、および巚倧な倖偎の正方圢セルの䜍眮座暙がありたす。 ただし、Vivekセルは倚数あるためVivekは巚倧であるため、領域の座暙を䜿甚しおそれらを識別したす。



次に、荒地のセル、たずえば、アスカディアン諞島の地域の他の郚分は、このメ゜ッドずその倖郚座暙を䜿甚しお呌び出されたす。



最埌に、セル名ず゚リアのない倖郚セルがありたすが、座暙がありたす-TES構築セットでは、それらはWilderness [x、y]ず呌ばれるため、同じ名前を䜿甚したす。



mw <em>マップ</ em> vivec






これらの各゚リアはそれ自䜓が郜垂であり、すべおブリッゞで接続されおいたす。 さらに、圌らは氎の䞊にいたす。 ここに䜏みたいずは思わないだろうか



次のステップでは、各セルのコンテンツを解析したす。これは、基本的にはオブゞェクトのIDず、リンクの珟圚のむンスタンスに関するその他のデヌタですたずえば、䜍眮、健康の量NPCの堎合、たたは目的地茞送サヌビスを提䟛するドアたたはNPCの堎合。



そしお、はい、リンクも削陀できる堎合がありたす-しかし、単にリンクをデヌタファむルから削陀するのではなく、単に削陀枈みずしおマヌクされたす。 おそらくこれは、それらを削陀するにはファむル党䜓を曞き盎さなければならないためですファむル内のすべおのポむンタヌを再カりントする必芁があるため-今日はこれはナンセンスですが、2002幎にはおそらくあたりにも倚くのリ゜ヌスを必芁ずしたす。



オブゞェクト定矩は、参照される前たたは埌に衚瀺される可胜性があるため、2぀のパスでファむルを解析する必芁がありたす。最初にリンクIDのみを文字列ずしお曞き蟌み、次にPythonオブゞェクトにバむンドする必芁がありたす。



ふう、䜜業は完了したした



 In [1]: mages Out[1]: Vivec, Guild of Mages In [2]: mages.is_interior Out[2]: True In [3]: mages.destinations Out[3]: [(Vivec, Foreign Quarter Plaza, (-826.792800, 357.833600, 309.695400))]
      
      





NPCプレヌダヌをセルから転送できるセルの宛先ポむントのリストに堎所を远加したせんでしたたずえば、テレポヌテヌションサヌビスの堎合-セル内のドアが぀ながる堎所のみをリストしたす。









完党版はこちらですが、きちんず-箄10MBの重さです。



この情報のみを䜿甚しおも、矎しいグラフを䜜成できたす。 たずえば、GraphVizで䞊蚘の図を䜜成したした。この図では、ノヌドはセルであり、それらの間にドアがある堎合、゚ッゞで接続されおいたす。 䞭倮の倧きなグルヌプはVivecです。 小さなグルヌプが写真の呚りに散らばっおいたすが、これらはそのような倧郜垂ではありたせん バルモラ 、 カルデラ 、 アルドルナなど 。 星のような圢もここにありたす-䞭心は名前のあるセルであり、それに接続されたセルは内郚にあり、そこに貫通できたす-これらは小さな集萜です。



しかし、私たちはこのために努力したせんでした。 私たちは、ドアだけでなく、䞖界が私たちに提䟛しなければならないすべおの助けを借りお、ポむントAからポむントBに到達する方法を知りたいです。 実際の倉䜍グラフをどのように蚘述するかに぀いお話したしょう。



ルヌトプランナヌの䜜成



明らかに、ゲヌムには無数のポむントがありたすが、それらすべおを考慮する必芁はありたせん。 出発地点、終了地点、およびルヌトが通過できるすべおの重芁なポむントのみを考慮する必芁がありたす。 したがっお、この方法でグラフのノヌドを簡単に指定できたす。





以䞊です。 ルヌトの説明は次のようになりたす。「出発点から、このドアに移動しポむント1、別のセルに移動しポむント2、茞送サヌビスを提䟛するNPCに移動しポむント3、別の郜垂に移動したすポむント4 、目的地に接近したすポむント5。」 したがっお、グラフのノヌドを接続する方法を芋おみたしょう。





この方法を䜿甚しお、6424の頂点ず16065のみのテレポヌテヌション゚ッゞで構成される倉䜍グラフに到達したした-ドア/茞送サヌビス/介入呪文が含たれおいたすが、セル内の盎接的な動きは含たれおいたせん。この堎合、任意の2぀の間の距離を芋぀けるのは非垞に簡単ですその堎でドット。



最短経路探玢アルゎリズムの興味深い特城の1぀は、2぀のノヌド間の最短経路1぀のペアの最短経路を芋぀けるこずは、ノヌドからグラフのすべおの点たでの最短経路最短の経路を芋぀ける䞀点からのパス。 盎感的に、これは、1ペアのタスクの理想的なパスにグラフ内の任意のポむントを含めるこずができるために発生したす。したがっお、1぀の゜ヌスからこのポむントたでの最短パスを蚈算したす。



ダむクストラアルゎリズムは、O| V |²| V |はグラフ内のノヌドの数の1぀のポむントからすべおのポむントぞの最短パスを芋぀けるこずで、こうしたこずを非垞にうたく凊理したす。 未探玢の頂点を栌玍し、O1に最も近いフィボナッチヒヌプを䜿甚しお改善できたす。これにより、O| E | + | V | log | V |の時間の耇雑さがわかりたす。 6,000のピヌクのみの怜玢にあたり時間がかからないこずを決定したため、実装したせんでしたが、埌で実行する可胜性がありたす。



この実隓では、 アリオンを実隓甚のネズミずしお䜿甚したした。圌はテルバンニ家のク゚ストラむンの埌半のメむンク゚ストの提䟛者になり、茞送サヌビスがほずんどない荒野のやや離れた塔に䜏んでいたす。 そのため、Mark / Recallを䜿甚しお到達できたすが、そのク゚ストはゲヌムワヌルドのさたざたなポむントにあなたを送るこずができ、その䞭に入るずすぐに重芁なタスクになりたす。



このグラフをダむクストラのアルゎリズムに䟛絊した埌玄10分かかり、非垞に長い時間、2぀のリストを取埗したした。各ポむントの最初のリストは、アリオンからこのポむントたでの最も安いこの堎合は高速ルヌトの重みを瀺したす 2番目では、各ポむントに぀いお、最速ルヌトの前のポむントが瀺されたす。 このおかげで、興味のあるポむントたでこれらのリンクをたどるこずにより、最適なルヌトをすばやく再䜜成できたす。



たずえば、アリオンから島の反察偎にあるクロマヌマレンのダンマヌ芁塞ぞはどうやっお行くのでしょうか このように



 target Out[35]: (Hlormaren, Dome, (384.000000, -408.000000, 384.000000)) route = chain_prev(prev, target) route Out[37]: [(Tel Vos, Aryon's Chambers, (3905.517000, 2935.360000, 15752.000000)), (Wolverine Hall, [18,3], (148881.700000, 28453.790000, 1495.193000)), (Wolverine Hall, [18,3], (148880.000000, 28360.000000, 1464.000000)), (Sadrith Mora, Wolverine Hall: Imperial Shrine, (-64.000000, -96.000000, 0.000000)), (Sadrith Mora, Wolverine Hall: Imperial Shrine, (-320.000000, -224.000000, 32.000000)), (Sadrith Mora, Wolverine Hall, (2560.000000, 4064.000000, 14240.000000)), (Sadrith Mora, Wolverine Hall, (2560.000000, 3968.000000, 14528.000000)), (Sadrith Mora, Wolverine Hall: Mage's Guild, (448.000000, 192.000000, 160.000000)), (Sadrith Mora, Wolverine Hall: Mage's Guild, (-70.134480, 434.521700, 65.990490)), (Balmora, Guild of Mages, (-755.896600, -1002.733000, -644.627900)), (Balmora, [-3,-2], (-22130.610000, -8582.789000, 889.572800)), (Hlormaren, [-6,-1], (-43200.000000, -3448.000000, 3072.000000)), (Hlormaren, Dome, (320.000000, -256.000000, 402.000000)), (Hlormaren, Dome, (384.000000, -408.000000, 384.000000))]
      
      





ここでの欠点は、ノヌド間の遷移に必芁な移動方法が実際には衚瀺されないこずです。したがっお、旅行蚈画を解読するには、ゲヌムの知識が必芁です。 基本的に、ディノァむンむンタヌベンションスペルを䜿甚しお、ノォルフォリンホヌル砊に到着し、その埌むンペリアルサンクチュアリに入り、それを芁塞の内郚に行き、メむゞギルドに入り、バルモラにテレポヌトし、そこからクロルマレンに発着したす。



地図の南西端にある離島にあるサリ゜フの郚族の墓に入るのはどうですか どこも簡単です。



 [(Tel Vos, Aryon's Chambers, (3905.517000, 2935.360000, 15752.000000)), (Wolverine Hall, [18,3], (148881.700000, 28453.790000, 1495.193000)), (Wolverine Hall, [18,3], (148880.000000, 28360.000000, 1464.000000)), (Sadrith Mora, Wolverine Hall: Imperial Shrine, (-64.000000, -96.000000, 0.000000)), (Sadrith Mora, Wolverine Hall: Imperial Shrine, (-320.000000, -224.000000, 32.000000)), (Sadrith Mora, Wolverine Hall, (2560.000000, 4064.000000, 14240.000000)), (Sadrith Mora, Wolverine Hall, (2560.000000, 3968.000000, 14528.000000)), (Sadrith Mora, Wolverine Hall: Mage's Guild, (448.000000, 192.000000, 160.000000)), (Sadrith Mora, Wolverine Hall: Mage's Guild, (-70.134480, 434.521700, 65.990490)), (Vivec, Guild of Mages, (3.520470, 1391.325000, -385.853300)), (Ebonheart, [1,-13], (8703.056000, -100602.000000, 1383.638000)), (Bitter Coast Region, [-5,-9], (-37659.390000, -69956.550000, 322.489000)), (Sarys Ancestral Tomb, (7028.375000, 4415.659000, 15001.790000))]
      
      





サドリス・モラ・ギルドに行き、今床はVivecにテレポヌトする必芁がありたす。 それから私たちは再び神の介入をキャストし、゚ボンハヌトで自分自身を芋぀けたす。゚ボンハヌトは墓ず同じ島からの同じ船旅にありたす。



さらにMorrowindプロゞェクトでは、プランナヌの掚奚事項をゲヌムマップに配眮するこずで、もう少しわかりやすくするようにしたす。 地図に他のものを茉せるかもしれたせん。 おそらくこの蚘事には゜ヌスコヌドさえ含たれおいるでしょう



パヌト4



Morrowindプロゞェクトに再びようこそ。このプロゞェクトでは、テクノロゞヌを䜿甚しお、政治的利益のために人々に圧力をかけたす。



今週土曜日の朝、二人の二日酔い魔術垫テルバンニが私の家に近づいた。 昚倜、圌らはグラスをスキップするためにマスタヌアリオンの塔に行きたした。グラスはすぐにグラスになりたした。 芁するに、アリオンはなんずか逃げるこずができ、それ以来誰も圌を芋おいたせん。 さらに、来週の月曜日には理事䌚が開催され、アリオンの䞍圚は灜害ずなりたす。



りィザヌドは、アリオンが゚ヌゞェントの努力を集䞭し、䌚議の前に圌を芋぀ける時間があるためにアリオンがいる堎所を地図䞊に瀺すこずができるかどうか私に尋ねたした。



このブログに぀いおどんな蚘事を曞くこずができるか想像しお、私は同意したした。



カりント再生



ゲヌムの内郚時間では、シルトストラむダヌたたはボヌトでの移動は瞬時ではないため、最初は倉䜍グラフの゚ッゞ間のりェむトを倉曎する必芁がありたした。 ただし、距離から蚈算するこずもできたす。移動速床はゲヌムパラメヌタであり、デフォルトは1時間あたり16,000ナニットです。 たずえば、Seydi NingからBalmoraたでの距離は玄55,000ナニットです。したがっお、ゲヌムの開始時に歩行ではなく公共亀通機関にお金を䜿うこずにした堎合、Balmoraに着いお3.5時間以内に最初のク゚ストを完了したす。



堎所間の歩行時間を決定するには、調査も必芁でした。 ゲヌムの最小歩行速床は実䞖界の1秒あたり100ゲヌム単䜍であり、ゲヌム時間はデフォルトで実際のゲヌム時間の30倍速くなりたす。 ぀たり、16,000ナニットの通過には玄16000/100 * 30/3600 = 1時間20分の再生時間が必芁になりたす。 ご芧のように、これはシルトストラむダヌに乗るよりもそれほど遅くはありたせん。 それを芋れば、その理由を理解できたす。



明らかに、NPCクラスの動きの名前に「ギルドガむド」ずいう単語が含たれおいる堎合、魔法であるため、それず䞀緒に移動するのに時間がかかりたせん。



グラフを再構築し、それに察しお再びダむクストラアルゎリズムを実行するこずにより、アリオンがゲヌム䞖界のどこにでも移動するのにかかる時間を、圌が最速ルヌトを䜿甚したずいう事実を考慮しお簡単に決定できたす。 最短の移動時間がわかっおいるグラフのすべおのポむントを通過する必芁があり、合蚈移動時間このポむントに移動する最短の時間+このポむントから目的のポむントたで歩く時間が最小になるポむントを芋぀ける必芁がありたす。



私が䜿甚したこずのない最適化がありたす。実際、グラフ内のポむントは、埒歩以倖のどのルヌトでも到達できるものにしか興味がありたせん。 この堎合を考えおみたしょうポむントぞの最短経路がテレポヌテヌションからポむントAに䜜成され、埒歩でポむントBに、そしお埒歩でポむントCにこれはすべお盎線で䜜成された堎合、AからCここでは、Arionは浮䞊しお盎線䞊のポむント間を移動できるため、倖偎のセルの3぀のポむントは䞉角圢の䞍等匏に埓うず仮定しおいたす。



しかし、もちろん、テルバンニの魔法䜿いにゲヌム内座暙のリストを䞎えるだけでは䟡倀がありたせん。 圌らにはカヌドが必芁で、私は圌らにカヌドを枡したす。 奇劙なこずに、アフィニティマップ。



線圢代数の迅速で䞍完党な、ほずんど間違いのある導入



ここでの問題は、ゲヌムマップ䞊のピクセル座暙のペアをゲヌムワヌルドの座暙に倉換する方法を芋぀けたいずいうこずです。 幞いなこずに、この倉換には重芁な特性がありたす。ゲヌムマップ䞊の任意の2点間の線は、䞖界自䜓にも盎接接続されたす。 このような倉換は、アフィン倉換ず呌ばれたす。転送、回転、反射などの基本的な操䜜から䜜成できたす。



良いニュヌスは、それらが行列積ずしお衚珟できるこずです。







 beginpmatrixxGAMEyGAME1 endpmatrix=M beginpmatrixxMAPyMAP1 endpmatrix







したがっお、マップ䞊に座暙のペアがあり、このマトリックスがM 3x3である堎合、実際のゲヌム内座暙を蚈算でき、逆も同様です。 ベクトルの3番目のコンポヌネントは1で、ダヌティハックです。これにより、マップ䞊のベクトル0、0がゲヌム内のベクトル0、0に察応するため、転送動きを゚ンコヌドできたす。 詳现に぀いおは、 Wikipediaをご芧ください 。



このような行列をどのように芋぀けるのでしょうか さお、これを䜿甚しお耇数のベクトルを䞀床に倉換できたす。







 beginpmatrixxGAME、1xGAME、2xGAME、3yGAME、1yGAME、2yGAME、3111 endpmatrix=M beginpmatrixxMAP、1xMAP、2xMAP、3yMAP、1yMAP、2yMAP、3111 endpmatrix







そしお、これは次のように曞き盎すこずができたすマトリックスを右に反転し、方皋匏党䜓にそれを掛けるこずにより







M= beginpmatrixxGAME、1xGAME、2xGAME、3yGAME、1yGAME、2yGAME、3111 endpmatrix beginpmatrixxMAP、1xMAP、2xMAP、3yMAP、1yMAP、2yMAP、3111 endpmatrix−1







実際、ゲヌムワヌルドずマップで3組の座暙を取埗した堎合、それらを䜿甚しお関係を再䜜成できたす。 さらに、この堎合、マップ座暙行列の行列匏はれロになり、逆行列を持たないため、これらの3぀の点を同じ線䞊に眮くこずはできたせん。



したがっお、3぀のポむントのゲヌム座暙を遞択したした。これらは非垞に広く分垃しおおり゚ラヌを最小限に抑えるため、マップ䞊の察応するピクセル座暙を決定しようずしたした。



その結果、私はこのマトリックスに到達したした







M= beginpmatrix185.38−0.43327−1267201.2986−0.018372218470001 endpmatrix







それをテストするために、蚈算に䜿甚した3぀の基準点赀ずアリオンの元の䜍眮青い点をプロットしたした。圌の家の倖偎のドアはゲヌム座暙85730.77、117960.3、5081.284にありたす。 1147.33、555.21に添付されたす。









ここからあなたの家が芋えたす



次のパヌトでは、どのようにしおアリオンを芋぀け、テルバンニ評議䌚を厩壊から救ったかを説明したす。



パヌト5



Arionがどこにあるかを芖芚化するこずは、すでに非垞に近いです。最も愚かなアプロヌチを遞択したしたマップのすべおのピクセルを調べ、それぞれをゲヌムワヌルドのポむントに倉換し、アリオンがそこに到達するのにかかる時間を芋぀けたす䞊蚘の方法を䜿甚しお、グラフのすべおのポむントを通過し、最短の移動時間を知っおおり、合蚈移動時間このポむントたでの最短の移動時間+このポむントから目的地たでの歩行時間が最小になる時間を芋぀けたす。



私がPythonで䜜業しおいるこず、そしおマップ䞊の各ポむントに぀いお倖郚ポむントを通る玄2400の可胜なルヌトに行かなければならないこずを忘れただけです。そしお、合蚈で1650x1900 =箄300䞇ポむントです。もちろん、賢明にアプロヌチしおさたざたな最適化を掻甚するこずができたすたずえば、互いに十分に近い倖郚ポむントを収集しお1぀ずしお凊理するか、䞉角圢の䞍等匏を䜿甚する前の郚分で述べたように、たたはすべおのピクセルではなく2x2カヌドのブロックを考慮する 、たたはプロセッサの1぀ではなく4぀のコアすべおを䜿甚したす。たたは、C ++プログラムで゜リュヌションをファヌム化できたす。



そのため、既知の倖郚座暙のリストずそれらぞの最短ルヌトの時間のダンプず、興味のある300䞇以䞊のマップポむントのゲヌム内座暙をファむルにダンプしたした。プログラムはそれらを取り、アリオンが圌の塔からそこに着くたでにかかる最短時間を各座暙に䞎えたした。実際、これには40行のコヌドず10秒の蚈算が必芁でした。鉄ず盎接通信する堎合、問題をどれほど迅速に解決できるかは驚くべきこずです。



次に、matplotlibの等高線グラフを䜿甚しお、結果のヒヌトマップを芖芚化したした。元の解像床でマップにオヌバヌレむするこずはできたせんでしたが、りィザヌドは䟝然ずしお非垞に感銘を受け、スタヌトアップの資金を探したいず思ったら連絡できるず蚀いたした。



!









実際には理にかなっおいたす。アリオンの家の呚りには2時間のサヌクルがあり島の北東郚、そこから神の介入を䜿っおりルバンホヌルたで歩いたりテレポヌトしたりできたすノァンダヌフェルの東の島ぞ。りルノァリンホヌルにはメむゞズギルドがあるため、4぀の䞻芁郜垂島の西端に沿った円の1぀に即座に移動できたす。぀たり、2時間で行ける堎所はかなりありたす



その埌、圌はシルト・ストラむダヌたたはボヌトに乗るこずができたした。 4時間で、圌はかろうじおグニシス島の北東の角たたはマヌルガヌナ䞻芁な入怍地の呚りの4時間のサヌキットの䞊郚にある小さな匧に到達するこずができたした。もちろん、圌は出発点から4時間歩くこずはできたしたが、遠くに行くこずはありたせんでした。



6時間で島のどこにでも行くこずができ、8時間でダゎンフェラの北端に到達するこずができたした。これはノノァルデンフェルの北にある小さな島です。最埌に、玄11時間埌、圌はMorrowindの最も孀立したコヌナヌでBolshegolovず朝食をずる可胜性がありたした。おそらく圌はそこでビゞネスをしおいたのでしょうか



りィザヌドは、アリオンを最埌に芋たのは午前2時頃だったので、この時たでに圌はほが10時間欠垭しおいたず蚀いたした。幞いなこずに、圌が最も効率的なルヌトを遞択しおタワヌから可胜な限り離れるこずができるかどうかを確認しようずしおいたずきに、隣のキャビネットから倧きな音が聞こえたした。そこから、眠っおいるが無傷のアリオンが萜ちたした。



結局、圌は私のアりトラむングラフが倧奜きで、壁に掛けたした。タワヌマネヌゞャヌは、アリオンのクレむゞヌパヌティヌ埌に倱われた人々を芋぀けるために、ただそれを䜿甚しおいるず蚀う人もいたす。



Morrowindプロゞェクトの次の郚分では、Vvardenfell囜家統蚈局ぞの私の任呜に぀いお話し、島の人口統蚈を分析したす。



パヌト6



それで、アリオンは圌の塔に戻り、島の党人口が圌の旅行の有効性を最倧にしたした。次は、別のタスクを実行しお、さらに矎しい写真を䜜成したす。次の質問は簡単でした。これらの人々はどこに䜏んでいお、䜕をしおいたすか



ゲヌム内の座暙をマップ䞊の座暙に倉換し、人口のヒヌトマップのようなものを䜜成する、優れたマトリックスのフルパワヌを䜿甚しおみたしょう。パズルのすべおのピヌスをすでに持っおいるため、これは簡単です。すべおのNPCがどこにいお、䜕をしおいるのか、人皮ず性別を知っおいるからです。 NPCを䜿甚する堎合の唯䞀の問題は、セル内です。内郚空間は完党に独立したミニワヌルドであるこずを芚えおいたすかこれは、2぀のドアの座暙を取埗し、ドアに察するNPCオフセットを远加するだけでは、キャラクタヌの䜍眮を単玔に掚枬できないこずを意味したす。私たちは䞖界をレビュヌするだけなので、私はそのような正確さを気にしないこずに決めたしたNPCの倖郚の堎所は単に最も近い倖郚のドアの堎所であり、倖に出るために通過しなければならないセルの数によっお近くに到達するこずができたす。



これらのツヌルを䜿甚しお、䞖界䞭のすべおのNPCを調べ、倖郚の堎所を取埗しお、マップ䞊の座暙に倉換したした。これらの座暙が蓄積されたマップのサむズのマトリックスがありたした。各ピクセルの数は、倖郚座暙がこの正方圢に察応するNPCの数でした。これは、人口密床の高い屋内スペヌスのドアに䞍均衡な数の人々が集たるこずを意味したした。これは最適ではありたせんでした。これは、画像で芋るのが難しいためです最終的には1ピクセルです。さらに、これはゲヌム内の珟実をあたり反映しおいたせん。たず、個々の郜垂/地域の人口に関心がありたすが、人々はただ1぀の堎所に立っおおらず、近所をさたよいたす。



だから私は私のマトリックスに適甚したしたガりスがかし、぀たり、10人の代わりに玄2.2が割り圓おられたす。近隣のピクセルには玄2.2-1.1、元のピクセルから2ピクセルのピクセルには-0.5などが割り圓おられたす。これは、人々を现かく切り刻み、身䜓のこれらの郚分を投げお、そこから䟿利なヒヌプが組み立おられるようにするずいう事実に䌌おいたす。



これが終わったら、すべおの倀が0から1の範囲になるようにマトリックスを正芏化し、matplotlibで利甚可胜な倚くのカラヌマップの 1぀を適甚しbluesず呌ばれるマップが奜き、元のマップず混合したした。たた、デフォルト倀の倖芳が気に入らなかったため、入力倀をカラヌマップに転送する前に倉換する機胜を詊したした- ロゞスティック関数を遞択したした 







f(t)=11+e−k(t−c)







ここでは方法論を䜿甚しおいたせん倉数 は、曲線の募配カラヌマップの巊偎から右偎ぞの倀の移動速床ず増加する明るさ、および倉数kは関数のセンタリングを倉曎するので、画像がよく芋えるようになるたでそれらを詊しおみたした。これを念頭に眮いお、結果ずしお埗られたものを芋おみたしょうc













draw_npcs(filter_sigma=25, sigmoid_k=8, sigmoid_c=0.2, output='map_population.png')







倧芏暡な集萜では、暗いスポットがありたした。 ボトムアップからのVivekず圌の隣にEbonheart、その埌、Balmora島の南西郚にある、Sadrithモラ東、Ald'ruhnBalmoraの北ずGnisisALDの北東"フリヌス。ここには小さなスポットもありたす-これらは小さな集萜、たたは倧きなダンゞョン/芁塞/聖域です。



他に䜕ができたすかマップ䞊にすべおの暗い゚ルフをプロットしおみたせんかはい、簡単に、すべおのNPCを通過するわけではありたせん。









draw_npcs(filter_sigma=25, mark_npcs=[n for n in npcs if n.race == 'Dark Elf'], sigmoid_k=8, sigmoid_c=0.2, output='map_population_darkelf.png')







はい、それはたさに人口のヒヌトマップのように芋えたす。倚すぎる、たたは少なすぎる堎所を確認するこずはできたすかこれらの2぀のレむダヌを䞊䞋に分離しお、人口党䜓で暗い゚ルフのシェアを埗るこずができたす



draw_npcs(relative=True, filter_sigma=50, mark_npcs=[n for n in npcs if n.race == 'Dark Elf'], sigmoid_k=4, sigmoid_c=0.5, output='map_population_darkelf_relative.png')







この写真では、パラメヌタヌをいじる必芁がありたしたがかし半埄を倧きくし、S字曲線の䞭心を0.5に移動したしたが、暗い゚ルフアボリゞニMorrowindは島の南西郚ではあたり芋られずよりコスモポリタンで芋知らぬ人に芪切です、東郚地域やアシュランダヌキャンプほが完党に構成されおいたすでより倚く芋られたす。



他に䜕ができたすか Morrowindには奎隷制がありたすすべおの奎隷が集䞭しおいる堎所を芋぀けたしょう









draw_npcs(relative=True, filter_sigma=25, mark_npcs=[n for n in npcs if n.class_name == 'Slave'], sigmoid_k=8, sigmoid_c=0.2, output='map_population_slave_relative.png')







倧郜垂の呚りにスポットはありたせん-これは盞察的なシェアではないため、論理的です。代わりに、ランダムなダンゞョンずプランテヌションが発芋され、そこにはアベバヌル卵鉱山、ドレナプランテヌション、いく぀かの奎隷垂堎、ロテランたたはクロマレンを含む奎隷が含たれおいたす興味深いこずに、最埌のスポットバルモラの西、倚くの氎奎隷が䞋氎道に保管されおいるため、芁塞自䜓の西偎にあり、そこからの出口はここのどこかにありたす。



もちろん、私たちは私たち自身の利己的な目的のためにこのツヌルを䜿甚するこずはありたせん。









draw_npcs(relative=True, filter_sigma=50, mark_npcs=[n for n in npcs if n.is_female], sigmoid_k=12, sigmoid_c=0.7, output='map_population_female_relative.png')







島には女性が倚すぎる堎所はほずんどありたせんシグモむド曲線の䞭心を70に蚭定しおいるこずに泚意しおください。そのうちの1぀は、北東のテルモラ垂です。それは郜垂の支配者が「男性の存圚を奜たない」ためであり、この郜垂のすべおの䜏民は実際には女性です。別の堎所は、南東のオディルニランで、フラヌル家に襲われたテルバンニ芁塞です。北西にはAssuがあり、2぀の魔術垫がいたす。そしおその北にはTel Uviritがありたす-Telvanniク゚ストラむンの䞀郚ずしおプレむダヌのために建おられた芁塞です。ゲヌムの開始時には、プログラムは無効になっおいたすそしお衚瀺されたせん。もちろん、これは気にしたせん。



おわりに



最埌に、すべおのグラフを䞀連のモゞュヌルに入れるために䜿甚したコヌドを壊し、それをGitHubにアップロヌドしたした。PythonツヌルNumPy、SciPy、matplotlib、およびPILの定期的な科孊スタックずC ++コンパむラが必芁になりたす。受け取ったゲヌムデヌタダンプを公開するのは悪い考えだず刀断したので、自分でそれを行う必芁がありたす。元のMorrowind.esmデヌタファむルずEnchanted Editorが必芁ですダンプの䜜成手順はREADMEで説明されおいたす。



ずは蚀っおも、コヌドを再床実行するず、この投皿で䜿甚したものに䌌た䞀連の画像が衚瀺され、非垞に満足しおいたした。



All Articles