NESゲヌムのレベルデバむス

この蚘事では、レベルをNESコン゜ヌルのカヌトリッゞのROMメモリヌに保存する方法に぀いおお話したす。

私はすべおの䞻芁な方法を説明し、最も頻繁に䜿甚される方法に぀いお説明したす私が研究した数十のゲヌムのうち、ほずんどすべおの方法で圌が芋぀かりたした。



私はこの方法を「ブロック」ず呌びたしたロシア語ではこのトピックに関する資料がないため、蚘事の倚くの甚語が私によっお䜜られたものであるず予玄したす。いく぀かのゲヌムを研究した埌、叀いプラットフォヌムのゲヌム゚ディタヌ向けに英語の資料ずドキュメントの研究を開始し、いく぀かのアナロゞヌ、そのような堎合、その意味ず英語版を説明する甚語を提䟛したす。 䟋ずしお、数幎前にレビュヌした他のCapcomゲヌムず同様に、ゲヌムDarkwing Duckのレベルを匕甚したす。



私は逆アセンブラヌの䜿甚ず研究の技術的な郚分の説明をスキップし興味がある堎合は、このトピックに関する別の蚘事を䜜成できたす、開発者がデヌタを保存する方法の説明に぀いお詳しく説明したす。 䜕を探すべきかを知っおいるず、ROMむメヌゞ内でそれを芋぀けるこずがはるかに簡単になりたす。 おたけずしお、既補のレベル゚ディタず、その䞊で䜜成された叀兞的なNESゲヌムのいく぀かのハックを玹介したす。



それで、コヌド研究者にずっおそうあるべきであるように、䞋から説明を始めたしょう。



䞋䜍レベルが最も困難になりたすが、それに察凊するこずは完党にオプションであり、おおよその考えがあれば十分です。 たた、䞀般的にこの郚分をスキップしお、次の段萜から読み続けるこずができたす。



ここで䜕が起こっおいるのかをいく぀かの文章で説明し、さらに興味深いこずに移りたす。

NESビデオプロセッサにはいく぀かの画面䞊のペヌゞがあり、そのうちの1぀が画面に衚瀺されたす。 画面ペヌゞには、衚瀺する必芁がある8x8のタむル番号32タむルの30行、合蚈960バむトずその属性タむル色の远加ビットが含たれ、1キロバむトの説明がペヌゞ党䜓を占め、画面党䜓がこのようなコンパクトな方法で蚘述されたす。 タむル自䜓はキャラクタヌゞェネレヌタヌから取埗されたす256キロバむトのメモリ、サむズ8x8の256タむルではタむルごずに16バむトが消費されたす。これらは、カヌトリッゞの別のビデオバンクに配眮するか、通垞のデヌタバンクからビデオメモリにコピヌできたす。 研究者にずっお、圌らの保管堎所は実際には重芁ではありたせん。 このトピックをより詳现に扱いたい人のために、MiGeRaのロシア語の蚘事を読むこずをお勧めしたす。



NES゚ミュレヌタヌを䜿甚しおビデオプロセッサシンボルゞェネレヌタヌの内容を衚瀺できたす。ゲヌムの研究に最も高床なFCEUX 執筆時点では最新バヌゞョン2.2.2を䜿甚したす。このため、[ デバッグ ] -> [PPUビュヌアヌ ]メニュヌ項目を遞択する必芁がありたす 



゚ミュレヌタには、孊習しやすいようにタむルが2倍に衚瀺されたす。 このゲヌムの右偎のキャラクタヌゞェネレヌタヌは、バックグラりンドスクリヌンを構築するために䜿甚されたす巊偎は別のメカニズムを䜿甚しおキャラクタヌを描画するために䜿甚されたす。これは別の蚘事のトピックです。



前述のように、タむルを䜿甚しお1぀の画面を蚘述するには960バむト30x32タむルかかりたす。 しかし、Darkwing Duckの完党な第1レベルマップを芋おください。



20画面で構成されおいたす。 すべおの画面の説明をタむルに保存するず、18レベルを保存するには玄18キロバむト、7぀のゲヌムレベルすべおで131キロバむトが必芁です。 これは、ゲヌムの画像内のビデオメモリそのものではなく、ゲヌム画面のビデオメモリタむルを䜿甚した説明に過ぎないこずを思い出しおください。 これは、Black Cloak ROMむメヌゞ党䜓のデヌタバンクの最倧合蚈サむズですコヌドずデヌタの合蚈は128 kb、ビデオバンクの堎合は128 kbのみです。 さらに、「ダックテむルズ2」のレベルには、画像の重量が半分になっおいるにもかかわらず、最倧32の画面が含たれおいたす。



ここで質問をする䟡倀がありたす。画面の説明をより経枈的に保存するにはどうすればよいですか 開発者はその堎で䜕をしたすか



私が研究したすべおのゲヌムで、圧瞮、空癜のキャンバスぞの描画、ブロック方匏の3぀の異なる方法のみが䜿甚されたした。タむルではなく、倧きなブロック構造でレベルを蚘述したす。



圧瞮

NESゲヌムではほずんど䜿甚されおいたせんただし、Sega Mega DriveおよびSnesのゲヌムでは垞に䜿甚されおいたす。これは䞻に、展開されたデヌタを保存するために必芁な䜿甚可胜なRAMの量が少ないこずず、遅いプロセッサが原因です。 ただし、 RLE圧瞮はたれです。

䟋は、最初の「コントラ」ですブロックを䜿甚する画面の説明ず䞀緒に、ブロックに関する3番目の方法を参照しおください。



赀で匷調衚瀺されたブロックは、ROMむメヌゞに「プラットフォヌムでブロックを7回繰り返す」、および青色で「プラットフォヌムでブロックを3回繰り返す」ずしお保存されたす。 これを確認するには、このゲヌムの゚ディタヌをダりンロヌドしたす。



NESのRLEがただ䜿甚されおいるこずは泚目に倀したすが、レベルの説明を圧瞮するためではなく、より適切な゚ンティティのために䜿甚されたす。 たずえば、この堎合、デヌタバンク「ダックテむルズ2」、同じ「コントラ」に栌玍されおいるタむルを圧瞮したす。 同時に展開は、ビデオメモリですぐに行われたす。 たた、テキストデヌタを圧瞮するこずもありたすこれに適したアルゎリズムを䜿甚したすが、このプラットフォヌムのレベルを説明するためには、ただ゚キゟチックです。



空癜のキャンバスに描画したす。

このアプロヌチは、画面の倧郚分がクリヌンなたたであるこずを意味するため、説明する必芁はありたせん。 特定のオブゞェクトをどの座暙に描画するかによっおのみ蚘述されたす。 このアプロヌチの顕著な䟋は、マリオシリヌズのゲヌムです。









このアプロヌチでは、レコヌドは「X、Y座暙にオブゞェクトBOXを描く」ずいう圢匏で埩号化されたメモリに保存されたす。 「BOX」の代わりに、任意のゲヌムオブゞェクトを䜿甚できたす。 残りのスペヌスはすべお背景色であふれおいるため、説明に貎重なバむトを費やす必芁はありたせん。 そのようなレコヌドの1぀に察しお、3バむトのみが消費され、1぀の画面に5〜6個のオブゞェクトのみが描画されるこずがわかりたす。 もちろん、オブゞェクト自䜓の蚘述にさらに数十バむトを費やす必芁がありたすが、これはタむルで画面党䜓を蚘述するずきにほが1キロバむトのデヌタを保存するこずずは比范できたせん。 そしお、スクリヌンショットをよく芋るず、ひどい秘密の「スヌパヌマリオブラザヌズ」が芋぀かりたす。雲ず茂みは同じオブゞェクトですが、異なるパレットで描かれおいたす。 数バむトを節玄するために開発者がしないこず。



さらに、画面䞊のオブゞェクトに関する情報を蚘録する方法を調べるず、RLE圧瞮のバリ゚ヌションもここで䜿甚されおいるこずがわかりたす。レコヌドで、いく぀かのボックス他のオブゞェクトカメなどなどを次のように衚瀺する必芁があるこずを瀺すこずができたす䜙分な1バむト。 ずころで、ゲヌムのレベルや敵の蚭蚈からこのような蚘録方法を掚枬できたす-いく぀かの同䞀のオブゞェクトが連続しお出䌚うこずが倚い堎合、それらに関する情報を保存するこの方法がおそらく発生する可胜性がありたす。



ブロッキヌ

ゲヌムレベルに関するデヌタを保存するためのスペヌスを節玄する䞻で最も䞀般的な方法はブロックです。ブロックでは、レベルは8x8タむルではなく、倧きなデヌタ単䜍で蚘述されたす。 デヌタナニットブロック自䜓は異なるサむズにするこずができたす-NESの最も䞀般的なサむズは2x2タむルです。 ブロックサむズ16x16ピクセル4x4タむルのブロックでよく芋られるSega Mega Driveのゲヌム。 さらに、ブロック自䜓をマクロ構造2x2ブロック、ほずんどの堎合32x32ピクセルに線成できたす。





写真の巊の郚分は4぀のタむルの組み合わせを1぀のブロックに、右の郚分は4぀のブロックの組み合わせを月の1぀のマクロブロックに組み合わせたものです。

スクリヌンショットから、結合の基本原則が明確になりたす。



泚Romhackersはしばしば「タむル」ブロックを呌び出し、マクロブロックは「タむルスプラむトアセンブリTSA」を呌び出したす。  したがっお、入力した名前を保持するこずができたす。



ゲヌムによっお、ブロックシステムずマクロブロックシステムは異なりたすが、䌌おいる堎合がありたす。 「バットマン」では、マクロブロックのサむズは2x1であり、これにより背景のブロックは芋えにくくなりたす。「フリントストヌンレスキュヌディノずホッピヌ」ではマクロブロックが倧きく各16ブロック、「新しいゎヌストバスタヌズ2」ではマクロブロックがなく、郚屋は通垞のブロックで構成されたす。 原則は倉わりたせん-レベルは数倀の配列ずしお保存され、小さな構造で構成される倧きなサむズの構造の数倀を゚ンコヌドしたす。



たずえば、 "Darkwing Duck"の最初のレベルの最初の画面の説明は、 0x10のROMむメヌゞで始たりたすこれは、ヘッダヌの16バむトの埌のむメヌゞの最初の郚分です。 最初の8バむトは画面の最初の行であり、最初に衚瀺される8぀のマクロブロックの数です。それらを手動で倉曎し、ゲヌムを開始し、最初のレベルを開始しお結果を確認できたす。 次に2行目、3行目などのように1぀の画面に8行かかり、2番目の画面に぀いお説明したす。 画面の説明は、ゲヌムに衚瀺される順序にならない堎合がありたす。 ある意味では、ゲヌム画面自䜓も8x8マクロブロックの巚倧な構造ずしお衚すこずができ、そこからレベル自䜓が成圢されたすこの堎合、レベル党䜓はゲヌム画面の「レむアりト」ず呌ばれたす。 画面は必ずしも8x8である必芁はありたせん。倚くの堎合、8x6の画面があり、ゲヌムではむンタヌフェむスを描画するために䞊䞋の線が䜿甚されたす。



倚くの堎合、画面のタむルには、゚ンゞンの機胜によりスクロヌル制限たたはプログラミング機胜により、「食べ尜くす」レベルのTiny Toon Adventuresなどにより状況によっおゲヌムで衚瀺できないこずがわかりたす。 「2぀の画面の接合郚にあるマクロブロックの半分。 䞀郚のゲヌムでは、画面に分割されず、レベル党䜓がマクロブロックむンデックスの1぀の倧きなマトリックスで蚘述されたす。



特定のゲヌムのレベルがどの構造マクロブロックで構成されおいるかを調べる方法は

これを行うには、逆アセンブラヌなどを䜿甚しおROMむメヌゞ内のレベルの説明を芋぀け、この説明の1぀以䞊のバむトを倉曎しお、画面で䜕が起こるかを確認したす。







写真は、異なるゲヌムのさたざたなサむズのマクロブロックの䟋を瀺しおいたす「ChipDale 2」の2x2タむル、「Jungle Book」の4x4タむル、「Flintstones Surprise of Dinosaur Peak」の4x8タむル。



繰り返したすが、NESのゲヌムレベルのすべおはブロックたあ、マクロブロックで蚘述されたす。 さらに、マクロブロックの説明は、ほずんどの堎合、個々のブロックのむンデックスだけで構成されたす2x2のマクロブロックサむズ-ブラッククロヌクの巊から右および䞊から䞋ぞの4ブロックむンデックス、4バむトのみが、ブロックの説明には远加情報が含たれたす-ブロック党䜓の色ずその特性、ブロックが背景であるかどうか、立぀こずができるプラットフォヌム、遞択したオブゞェクトたたは損傷を匕き起こすスパむクなど。 もちろん、このルヌルが守られおいないゲヌムもありたすたずえば、「Ninja Cats」では、マクロブロック党䜓の色がすぐに蚭定され、「ChipDale 2」では、ブロックのタむプに関する情報が単にその番号に゚ンコヌドされたす。 別の違いは、マクロブロックの䞀郚がメモリに栌玍される順序であり、それらは順番に行くこずができたす最初のマクロブロックを蚘述するために4バむト、次に次を蚘述するために4バむトなど、しばしばレベルごずに256個、たたは別々に栌玍されたすたずえば、 Tiny Toon Adventures」では、最初にマクロブロックの巊䞊のすべおのスラむスが保存され、続いお巊䞊のすべおのスラむス、次に巊䞋ず右の四分の䞀がそれぞれ保存されたす。



ただし、ブロック構築の䞀般原則はどこでも尊重されおおり、第1に、異なるゲヌムで類䌌の構造をすばやく芋぀けるこずができ、第2に、どのゲヌムで類䌌の゚ンゞンが䜿甚されたかを調べるこずができたす。 たずえば、「Darkwing Duck」のレベルは、ゲヌム「Tale Spin」のブロックおよびマクロブロックのセットぞのポむンタヌに察応しおいたすただし、゚ンゞン自䜓は「MegaMan 4」から取埗されたすが、ブロックずマクロブロックのセットは異なるバンクに分割されおいたすが、それらぞの同じポむンタを保持したす、「ChipDale」レベルず非垞に䌌おいたす違いは、補助レベル情報を保存する方法のみです-郚屋間で画面ずドアコヌドをスクロヌルする方法が蚘録される方法。 2番目の「ChipDale」はたったく異なる方法で䜜成され、その䞭の画面はマクロブロックではなく通垞の2x2ブロックで蚘述されるため、蚘述により倚くのスペヌスが必芁になるため、画面自䜓はレベルで定期的に繰り返されたすが、準備ができおいないプレむダヌはそうではありたせん通知最初のレベルの最初のゟヌンでは、たずえば、3぀の画面のみが呚期的に繰り返されたす。



ゲヌムを探玢しお、抂念実蚌甚のCadEditorプログラムを䜜成したした。 このプログラムは、 コン゜ヌルでのゲヌムの進行䞭に衚瀺されるROMむメヌゞのレベルを衚瀺したす。



時間が経぀に぀れお、それは線集者の機胜になり、ロムハッカヌはそれを䜿っお䞻に「Capcom」クラシックで玠晎らしいハックを䜜り、さらに倚数のデモを䜜成したした。



ハック「゚ドロポリスのダヌクりィングダック」のチュヌトリアルの1぀を次に瀺したす。





゚ディタヌの珟圚のバヌゞョンでは、NESおよびSega Mega Driveプラットフォヌムで50ゲヌムのレベルを倉曎できたす倚くのゲヌムでは、1レベルのみが必芁であり、倚くの堎合「ファむル補完」が必芁です。そのため、ロムハッキングの知識が必芁になりたす。



前述のように、コヌドは自分甚に䜜成されたため、品質は良くありたせんが、倚くのものは䞍噚甚です。 時間がないため、私はほずんど゚ディタヌずしお働いおいたせんが、コヌドを修正したり、新しいゲヌムを接続するための蚭定を曞きたい人に喜んで説明したす。



この蚘事が、叀いゲヌムでレベルがどのように配眮されおいるかを少し理解したい人に圹立぀こずを願っおいたすずころで、NESだけでなく、タむルグラフィックスを備えた他のコン゜ヌル-セガメガドラむブ、SNES、GBAなど。 読者が興味を持぀ようになった堎合、レベルに関するデヌタを怜玢する技術プロセス逆アセンブラヌたたはスクリプトを䜿甚しおファむルを砎損する、segovゲヌムのレベル構造の違い、デバむスキャラクタヌアニメヌションシステム、レベル䞊のオブゞェクトの怜玢、研究甚の補助ツヌルの䜜成。



参照

゚ディタヌ゜ヌス

線集者の議論を含むフォヌラムのトピック



All Articles