Vectrex甚のFroggerの開発

少し前にクリス・サロモンのストヌリヌを翻蚳したした。圌の開発したVectrexコンピュヌタヌ甚ゲヌムFroggerに぀いおです 。 私の意芋では、1998幎に圌が曞いたこの物語は、この珍しいプラットフォヌムの粟神ず䞀般的なアセンブラヌの開発の詳现の䞡方を浞透させるこずができる非垞に興味深い文曞です。

クリスはVectrexを攟棄せず、比范的最近、「Vide」ず呌ばれる独自のWindows甹Vectrex゚ミュレヌタ珟時点では最高をリリヌスしたした。 ずころで、私は電気力の情報源が、この゚ミュレヌタでベクトル曲線を衚瀺するための適切なサポヌトを実装するのを助けおくれたこずを嬉しく思いたす。

そのため、このような匷力なツヌルを手に入れたクリスは、叀いフロッガヌに戻っお改良し改善する喜びを吊定できたせんでした。 圌は圌のブログでこれに぀いお話したした。

したがっお、ここで翻蚳の2぀の郚分を公開したす。1぀目は1998幎の元の開発ゲヌムの゜ヌスず共にロヌミングしたprogger.txtファむルから、2぀目はその継続 著者のブログから です。

1998幎。開始




このファむルには、他のVectrex開発者が関心を持぀可胜性のあるメモが含たれおいたす。
たた、Vectrex Froggerの開発の「短い」歎史も含たれおいたす。

Vectrex Froggerは垞に50Hzの呚波数で画像を曎新したす。 すべおが30,000サむクル以䞋でレンダリングされたす。 以䞋は、これを達成するための最適化手法に関する泚意事項です。

実際、私は非垞に郜垂のスピヌドを達成しおいたす スプラむトを操䜜するための私の機胜は、Vectrexのゲヌムに存圚するすべおの䞭で最速である可胜性がありたす少なくずも私はそう思うのが奜きです...

スプラむトは、実際のVectrexでは少し奇劙に芋えたすが、少し「汚い」ですが、慣れるこずができたす。 私はそれらのそれぞれに固定スケヌルを䜿甚したため、それらはむらがありたす6.長い線は短いもので構成されなければなりたせんでした。 Vectrexは、その性質䞊、必芁なずきに垞にビヌムをオフにするわけではありたせん必芁以䞊に2から3メゞャヌ埌。 そしお、圌は描画を開始する前に、いく぀かの措眮のために垞にビヌムをオンにしたす...

これは明るい点に぀ながりたすタむマヌを䜿甚せず、より正確に時間を蚈算するベクトルを描画するための新しい関数を䜜成できたすが、誰がこれをしたいのでしょうか。

Vectrex Froggerは、ずりわけ、このコンピュヌタヌでプログラミングを教えるための十分に文曞化されたプログラムであるず想定されおいたした。 私にはこれができなかったようです。
わずかな時間間隔で描画されるはずの膚倧な数のベクトルのため、各クロックサむクルを最適化する必芁がありたした。 これらの最適化のために、プログラムはよく読たれなくなったように思えたす。 メむンルヌプでは、唯䞀のBIOS関数呌び出しが残りたしたデゞタルゞョむスティックのステヌタスをポヌリングしたす。

他のすべおの呌び出しは順次削陀され、最適化された特定の状況向けのマクロたたはルヌチンに眮き換えられたした。

あなた自身が曞いおいない限り、これらすべおを掘り䞋げるこずは非垞に困難です。

適甚された最適化手法の1぀

ベクトルの描画方法の説明。

...

䜕らかの方法で、ビヌムを垌望の䜍眮に移動するには、その速床、方向、およびこの速床が適甚される時間を指定したす。 次に、この時間が経過するたで埅ちたす。

時間は蚭定したスケヌルです。 スケヌルを90ドルに蚭定した堎合、この倀はタむマヌ1VIA_t1_cnt_lo。およそPer。に曞き蟌たれる必芁がありたす。その埌、「圹に立たない」サむクルで、有効期限が切れるず予想されたす。

私がしたこずは、このサむクルを䟿利にするこずでした。 蚈算の倧郚分は、Vectrex Froggerで、通垞は圹に立たないこの時点で行われたす。

䞻にビヌムを移動するずきに、このアプロヌチを䜿甚したした。 ここでの倧きなプラスは、この時点で私がいくら努力しおも、䜕にも圱響しないずいうこずです 泚目すべき唯䞀のこずは、タむマヌ倀よりも短い時間をずらないこずです。 ただし、これは同じタむマヌポヌリングサむクルVIA_int_flags-箄Per。で簡単に解決できたす。蚈算の最埌に。

ベクトルを描画するずきに同じアプロヌチを䜿甚できたす。 ベクトルの描画ず移動はたったく同じです。 唯䞀の違いは、シフトレゞスタに曞き蟌たれる「パタヌン」です。 0がそこに移動するために曞き蟌たれ、$ FFが描画されたすもちろん、実線を描画したい堎合。

ただし、描画するずきは、時間通りにシフトレゞスタに0を曞き蟌むこずによりビヌムをオフにする必芁がありたす。 それ以倖の堎合は、ベクトルの最埌に明るいドットを取埗したす

最適化するもう1぀の方法は、特殊な関数マクロを蚘述しおベクトルのリストを描画するこずです。 そこに勝った各ビヌトは、金でその重量の䟡倀がありたした。

30個のスプラむトを印刷し、各スプラむトが20個のベクトルで構成されおいるずしたす。 これは玄600ベクトルです。 ベクトルごずに玄10メゞャヌを節玄する最適化された関数を䜜成するず、1ヒットで玄6,000メゞャヌを獲埗したす!!!

そしおただ-展開サむクル 実際、私はWatcom Cのプログラムでこのアプロヌチを絶えず䜿甚しおいたしたが、自分で実装するずは考えおいたせんでした。 今日は、ベクトルのリストを描画する機胜を拡匵しお、運を詊したした。 頑匵っお 私はすべおのベクタヌで10以䞊のメゞャヌを獲埗したした。 これにより、3,000ビヌト近くの加速床が埗られたした。 スプラむトを描画するメむンサむクルである1サむクルのみスピンしたした。

別の重芁なスプラむトペむントサむクルハりススプラむト甚は倉曎されおいたせんが、この方法ですべおのサむクルを最適化するず、おそらく500から1000ティックになりたす。 しかし、マむナス面もありたす-これにより、プログラムがはるかに長くなりたす。 たあ、すべおを手に入れるこずはできたせんよね

もう必芁ないようであるため、別の手法は䜿甚されおいたせん。
スケヌルに関する情報を含む新しいタむプのベクトルリストを実装するず、倚くの長い線が短く描画されるため、数サむクルでゲむンを埗るこずができたす。 リストに長さの2番目の倉数が含たれおいる堎合、これにより損倱を枛らすこずができたす。

ずころで
私が䜿甚したアセンブラは非垞に優れおいたす。 最適化するには、䜜成された* .lstファむルを確認しおください。 コヌドだけでなく、各呜什のメゞャヌの数ずその長さも含たれおいたす...確かに、ずおもクヌルです

オブゞェクト定矩に関する少しVectrex Froggerで䜿甚されるルヌチンに固有

ゲヌムに描かれおいるすべおの「オブゞェクト」は、オブゞェクトず呌ばれおいたす。 これらのオブゞェクトは、ベクトルのリストずオブゞェクトの構造の定矩ずいう2぀の異なる゚ンティティで構成されおいたす。 ベクトルのリストは、Vectrexに共通です。 最初にベクトルの数マむナス1、次にベクトルの盞察座暙倉䜍がありたす。

衝突怜出を容易にするために、これらのベクトルのリストはすべお巊端のポむントから開始する必芁がありたす。 サブルヌチンの以前のバヌゞョンでは、それらを必ず閉じる必芁がありたしたが、これはもはや必芁ありたせん。

次に、オブゞェクトの構造の䟋を瀺したすVectrex Froggerから取埗。

otter1a_object: DB 0 ;  +  DW otter1a_sprite ;   DB 0 ;   SCALE_FACTOR_GAME DB 5 ;    DW otter1b_object ;      DB -4 ;  y  'SCALE_IN_HOME',    "" DB 0 ;  x  'SCALE_IN_HOME',    "" DB $60 ;  DB 0 ;   

スプラむトは固定のスケヌル6で描画されたすこれは将来のバヌゞョンで倉曎される可胜性がありたす-スケヌルに関する情報を含む新しいベクトルのリストに぀いお考えおいたす。

描画ルヌチンが非垞に最適化されおいるため、これを倉曎するこずはできたせん倉曎しないでください。 実際、ルヌチンは非垞に最適化されおいるため、必芁なものを正確に描画できたせん。

2぀の問題がありたす。


゚ミュレヌタヌのメモ

Vectrex Froggerぱミュレヌタで正垞に動䜜したすここでは、DVEに぀いお語っおいたす-箄Per。、 しかし 

最適化は実際のVectrexを䜿甚しお行われ、゚ミュレヌタヌはコヌドの怜蚌に必芁ないく぀かのささいなこずにはただ察凊できたせん。 珟圚ず同じように機胜したす。 しかし、自分で䜕かを最適化する堎合は、Vectrexが必芁です。完党に異なる方法で実際のハヌドりェアですべおが機胜するず、動揺したす。 これは、時間間隔を正確に遵守する堎合に特に圓おはたりたす。

゚ミュレヌタはすぐに倚くのこずを行いたすが、実際のVectrexには時間がかかりたす。 たずえば、これはビヌムのれロ化ずVIAレゞスタぞのアクセスに圓おはたりたす...
Vectrex-aを衚瀺するための倚くの興味深い指数関数がありたす
積分噚のコンデンサの充電および攟電など。

物語




Vectrex、特にVectrex Froggerのプログラミングの歎史。

私は1983幎に初めおVectrexに興味を持ちたしたが、それを買うお金がありたせんでした。 1996幎、プログラマヌのスキルをテストし、Vectrex゚ミュレヌタヌを䜜成できるず考えたした。 しかし、ケむト・りィルキンスは同じ方向に考えたした。 私ぱミュレヌタの最初のドラフトしか持っおいなかったので、圌は゜ヌスコヌドをレむアりトしたので、それらを捚おお、キヌスの゜ヌスコヌドを調べ始めたした。

次の2幎間で、私はいく぀かの面で゚ミュレヌタを改善し、今では、私がそれを担圓しおいるず思いたす。

数か月前、私はDVE前述の゚ミュレヌタ-箄Per。をVectrexの開発環境に倉えるのが楜しいず思った。これぱミュレヌションが今ではこれで十分であるように思えたからだおそらく、Pentium III 500MHzがすぐに手頃な䟡栌でリリヌスされない限り、そうなるこずはないでしょう。
もう䞀床、Vectrexプログラミングに関連するすべおに぀いおむンタヌネットを調べお、プログラマが必芁ずするものを芋぀けたした。

発芋はかなりでした。 ただし、いく぀かのゲヌムの画像を分解したものは、十分に文曞化されおいたす。 クレむずゞョンからの䜕かですが、よく文曞化されおいるずは蚀いたせんが特にあなたのゞョン。 「実際の」プログラミング情報はありたせんでした。 だから私は自分でそれを理解すべきだず決めたした。

ある日、私は座っおVectrexの最初のゲヌムであるVPONGを曞きたした。 箄4〜5時間で曞かれおおり、初心者にずっおは驚くほどうたく機胜したしたが、プレむアビリティの面での成果を意味するものではありたせんプレむダヌは1人だけで、プレむするのは非垞に困難です。 ただし、必芁だったのは、サりンド、ベクタヌ、テキスト、ゞョむスティック、ボタン、スケヌリング、フェヌドなどです。

翌週、私はVectrex Froggerのアむデアを思い぀きたした。そこから、スプラむト゚ンゞンの最初のプロトタむプが生たれたした。 それから、倧きな倀でのスケヌリングは悪い考えだずいう「発芋」をしたした。

私はプログラムの速床に぀いお考え、目暙は1回の曎新でした以降、Wait_Recalの次の呌び出したで、1぀の条件付き「フレヌム」の完党なレンダリングに぀いお話したす。玄Per。。 これが70,000クロックサむクルで発生するず、リフレッシュレヌトは20 Hzを超えるず考えられたした。 蚱容可胜なちら぀き。

圓時、私はすでにVectrexを䜿甚しおいたしたが、ただコンピュヌタヌのパラレルポヌトに接続されおいたせんでした接続を把握できた堎合、アむデア党䜓をかなり迅速に攟棄しおいたため、良いです。

スケヌル倀を詊しおみたずころ、倀が倧きいず曎新が100,000サむクル以䞊続くこずがわかりたした。 さらにチェックするず、小さな倀が正垞に機胜し、玄50,000クロックサむクルになったこずがわかりたしたちなみに、私が゚ミュレヌタを担圓しおいたずいう事実が非垞に圹立った堎合がありたす。メゞャヌの数を枬定する゚ミュレヌタ関数を䜜成したした。曎新に必芁な察策を提䟛したした
スケヌルはタむマヌであるため、実際にスケヌルが圱響するこずは非垞に明確です...しかし、それからこれも知っおいるので、それが䜕を意味するか本圓に想像できたせんでした。

いずれにせよ、䜜業䞭のスプラむト゚ンゞンを手に持っおいお、あらゆる皮類の奇劙なベクトル描画がカ゚ルのように画面䞊を動き回りたした。 スプラむトを操䜜するためのサブルヌチンは既にアニメヌションをサポヌトしおいたしたが、2぀たたは3぀のスプラむトを䜜成した埌、私は完党に疲れおいたした。 玙に鉛筆でスプラむトを描き、その座暙をVectrexの座暙に倉換したした。 たくさんのスプラむトに察しおこれを行うず完了です$ "$" "$=​​!!!
幞いなこずに、私は䜕かするこずを探しおいる友人を芋぀け、私のプログラムで簡単に䜜業できる方法で座暙を保持する小さなベクトル描画プログラムを䜜成するように圌を説埗したした。 ゞェヌムズ私の友人はそのようなプログラムを䜜りたした、そしお、私は䞻なものをしたした。

非垞に迅速に、ゞョむスティックず衝突怜出ルヌチンがたずめられたした。

Froggerの最初のバヌゞョン初期レベルは、3日間のプログラミング埌に再生できたすが、家に入るこずができず、他の特別な機胜は実装されおいたせん。

繰り返したすが、スプラむトの䜜成に少し疲れたした。 仕事から垰る途䞭のバスのいく぀かのルヌチンに぀いおも考えたした。 私が寛倧に「モヌフィングサブルヌチン」ず呌んだサブルヌチン。

私は、ベクトルのリストをゆっくりず別のリストに倉曎でき、その結果はクヌルな効果になるず考えおいたした。 これに぀いお少し考えおみるず、6809にはDIV呜什がなく、MULには眲名がありたせんでした。

このような2぀の関数ず2぀のただ存圚するモヌフィングルヌチンsetupずdo_one_stepを䜜成したした。 ああ、圌らは非垞に遅かった-自己蚘述サブルヌチンを介しおフレヌムごずに䜕床も陀算ず乗算を行うためには、費甚がかかりたした、ず私は蚀いたす。 すぐに、分割機胜を、正垞に機胜する最適化バヌゞョンに眮き換えたした。

これたでのずころ、任意の8ビット数のステップでモヌフィングできるモヌフィング関数がありたした。 しかし、圌女は実際の䜿甚にはただ遅すぎたした。 倚数の最適化の埌、ステップ数が16のモヌフィング関数を思い付きたした。これは、ゲヌムの起動䞭およびいく぀かの䞭間゚ピ゜ヌドで䜿甚される関数です。

これを終えお、音に切り替えたした。 私は垞にノヌトが䜕であるかに興味を持っおいたしたが、最終的にそれを理解したせんでした぀たり、Vectrex-BIOSに関連する。 私は音楜を読むこずができず、誰でもいたすが、ミュヌゞシャンではありたせん。

The yankee doodleをむンタヌネットで怜玢しおも、䜕も芋぀かりたせんでした。 それはすべおMIDIファむルで終わりたした。 それから、私はMIDIプレヌダヌ/゚ディタヌを探し始めたした。 その結果、メロディヌの音笊を読みやすい圢匏で衚瀺するものがありたした。 最埌に、私はフロッガヌのためにダンキヌの萜曞き音楜を「曞きたした」。
私にずっおは本圓に玠晎らしい偉業でした

最初は、ドラムにテヌマを聞いお欲しかったのですが、それはかなり悪い音でした。 メロディヌの挔奏方法では、3぀のボむスが䜿甚され、それぞれにオクタヌブシフトがありたす。 私にはずおも普通に聞こえたす-いずれにしおも、私ぱラヌを認識できたせん:-(

次に、いく぀かの詳现を远加したす。 これは、既成のコヌドで楜したせ、新しいものを導入するこずを意味するためもちろん、バグでいっぱい、私が恐れおいたものでした。 新しい詳现は、パ、ワニ、ヘビ、女の子、タむマヌ、時蚈、カワり゜、浮遊カメでした...

私は目を閉じおそれらをすべおプログラムしたしたが、このレッスンの1分は奜きではありたせんでした。 実を蚀うず、私はそれを嫌っおいたした。 しかし、これらはフロッガヌがフロッガヌになるために私がしなければならなかったこずです。 カ゚ルがヘビの頭に近い堎合など、パが出珟するずきの銬鹿げた時間倉数を䜿甚したこれらのゲヌムは、䜕床も座暙チェックを行いたす...私は我慢できたせんでした。

しかし、あなたが芋るこずができるように、私はそれをやった。 ただし、すべおが代償を䌎いたす。 フロッガヌは遅くなりたした-圌は再びそれらの70,000小節に近づきたした。

その時点で、Vectrex-a甚のEPROMが入ったカヌトリッゞを手に入れお、いく぀かの異なるゲヌムを実行しおいたしたが、スロヌゲヌムが頻繁にちら぀くこずがわかりたした:-(。私は本圓に気に入らなかった。泚文したEPROM゚ミュレヌタヌがただ到着しおいないので、いく぀かのEEPROMがあり、それらを芋お...

その瞬間、私は実際のVectrexでFroggerがどのように芋えるか非垞に心配しおいたしたが、プログラマヌを芋぀けるこずができたせんでした。

しかし、私はフロッガヌの速床が遅すぎるこずに気付き、最適化ずトレヌドオフに぀いお考え始めたした。 私が最初にしたこずは、メむン画面からスコアリング、ラむフ、レベルむンゞケヌタヌを削陀するこずでした。 このばかげた関数「print string」を1回呌び出すず10000サむクル以䞊かかるず信じられたすか

次に、すべおのスプラむトを線集し、20個以䞋で10〜15個のベクトルのみが䜿甚されるようにトリミングしたした。これにより、玄10,000ティックのゲむンが埗られたしたこれらのスプラむトをすべお線集するのは我慢できたせんでした
ちなみに、スクロヌルテキストに衚瀺されるカメは、ゲヌム自䜓をうカメの祖先です。

その埌、私は自分のタむミング目暙を達成できるず確信したした。 珟圚、この目暙は50,000サむクル内で各フレヌムをレンダリングするこずでした。垂販のゲヌムで行われたすべおの枬定は、この倀が信頌できるこずを意味し、䞀郚のゲヌムはそれを超えおいたためです

ただROM゚ミュレヌタを埅っおいたす...

ただ空き時間があったので、スクロヌル可胜なテキストを実装するのがいいず刀断したした。 動くスプラむトのストラむプが10個あるフロッガヌがほが完成したので、動く文字のストリップを1぀䜜るのはそれほど難しくないず思いたした。 実際、すべおの文字を3回たたは4回描画しベクタヌ描画プログラムには重倧なバグがありたした、それにある皋床の神経を費やした埌、私はそれをやり盎したした。

ただし、新しい問題が発生しおいたす。 Vectrexには倧量のRAMがありたす 1キロバむト。玄。。 レベルずスプラむトに関する情報を埗るには、RAMに他の倚くの倉数を保存し、モヌフィングを行い、スクロヌル可胜なテキストを保持する必芁がありたす-これは別の課題でした。 RAMセルの分垃を倉曎し、そのうちのいく぀かを2回から3回䜿甚し始めたした。 これも行われたしたが、埌でVectrexのプログラミングはただ簡単だず思いたした。

ただROM゚ミュレヌタを埅っおいたす...

だから私はただ埅っお、コヌドを倉曎せずに時間が過ぎた。
最終チェックは実際のVectrexで行わなければならなかったので、数週間は䜕もしたせんでした...

最埌に、圌は到着し、接続されお...動䜜したせん
私は䜕かをチェックしたした...はい、それは動䜜したすが、私が持っおいた唯䞀のEPROMカヌトリッゞは最倧8Kのアドレスしか持っおおらず、その時たでにフロガヌはすでにこのサむズを超えおいたので、ゲヌムをプレむできたせんでした
ただし、圌は他のほずんどすべおのゲヌムを初めおプレむしたした。
私自身は電子機噚を理解しおおらず、カヌトリッゞを16Kbたたは32KbEPROMで動䜜するように䜜り盎す方法がわからないため、倧声で助けを求めたした。 ゞョンは私の叫び声を聞いお、完璧に機胜するEPROMカヌトリッゞをいく぀か送っおくれたしたさらに2週間かかりたした。
開始時に8Kにアクセスできるこずもそれほど悪くはなかったので、Froggerをいく぀かの郚分に分割しお、それらを1぀ず぀テストするこずができたした。 これにより、ゲヌムのすべおの機胜を評䟡するこずはできたせんでしたが、郚分的なチェックには十分です。

その埌、゚ミュレヌタが再珟できない匷いぐら぀き効果を発芋したした。 問題を研究した埌、私はこれがタむミングによるものであるこずに気づきたした。 ぐら぀きは、ほずんどの郚分で、起動時に顕著でした。 そしお、「動きのない」ベクトルが䜕らかの方法で描かれ、アニメヌション化され、動いたずきにのみ、これに察する免疫のようなものを獲埗したした奇劙な
䜕らかの方法で灰色の髪の毛がいく぀かあったので、フレヌムの曎新に30,000サむクル以䞊かかるず、動きのないベクトルが少なくずもVectrex-eでずれ始めるこずがわかりたした。 これは私のゲヌムだけでなく、ベクタヌをどこかに固定し、フレヌムの曎新に30,000ティック以䞊を必芁ずするほずんどすべおのゲヌムにも圓おはたりたした。

これは、組み蟌みのVectrexゲヌムであるMinestormにも圓おはたりたした。 ゲヌムが始たるず、数秒埌、最初の地雷が画面に衚瀺されたずきに、ドットがゆらゆらず動いおいたした私が確認するこずしかできなかったため、圓然Vectrexで。

この効果がどのように芋えるかを芋぀けるずすぐに、かなり頻繁にそれを怜出し始めたす。
蚀うたでもなく、完璧䞻矩者ずしお、私はそれがたったく奜きではありたせんでした。

他のゲヌムは奜きなだけずらすこずができたすが、私のゲヌムではできたせん。 もちろん、起動時に衚瀺されるスタヌト画面には衚瀺されたせん。

この効果の原因はただわかりたせん。このトピックに関する技術情報は歓迎したす。 曎新に時間がかかりすぎた堎合に起こるのはちら぀きだけだず思いたした。 しかし、タむマヌを「再キャリブレヌション埅ち」に暙準の30,000クロック倀、動きのないベクトルWAVE以䞊に蚭定しおも 通垞、このタむマヌの倀は、Vectrexがオンになっお初期化され、Wait_Recalでチェックされるため、すべおの「フレヌム」が少なくずも30,000クロックサむクルかかりたす。泚per 2番目の「固定」倀は50,000の範囲にあるず思いたすが、ちら぀きは蚱容できたせん。

「VECTREX FROGGER」ずいう碑文ず他のすべおが同時に画面に衚瀺されないようにコヌドを倉曎したしたこの愚かなテキストもレンダリングに玄5000〜6000サむクル必芁です。 リヌル開始時は過去のものです。

しかし、私は別の効果を発芋したした実際のVectrexで芋られるのは、劥圓な方法で修正できなかったためです。座暙は垞に+、+右ぞにゆっくりずドリフトしたす。

ビヌムを十分に長い時間攟眮するず、右に䞊がりたす。 ゲヌムの開始時に、倧きなスケヌルを䜿甚しおベクタヌの倧きなリストをたどっお倧きなカ゚ルを描くのは非垞に時間がかかりたす。 巚倧なカ゚ルを完党に描くには、玄2000〜3000サむクルかかりたす。 この間、ビヌムは玄0.5センチ浮䞊したす。 レンダリング間でビヌムを再キャリブレヌションする必芁があり、これにより問題が解決したす。 しかし、これには十分な時間はありたせん:-(カ゚ルは63個のベクトルで構成されおおり、所定のスケヌルで63個のベクトルを配眮するこずは、タむムクリティカルではない方法で䞍可胜です

63 * 90ドル= 9000の正味ビヌム移動時間、オヌバヌヘッドなし
63 * 70ドル= 7000正味ベクトル描画時間、オヌバヌヘッドなし
オヌバヌヘッド= 1000ティック。 これは、カ゚ルだけですでに玄17,000ビヌトです。 たた、スクロヌルテキストず、カ゚ルのモヌフィングも蚈算する必芁がありたした。

さらに、ドリフトが䞀定でないため、固定オフセットを蚭定できたせん。 それは私のVectrexのムヌドに䟝存したす結局、これは叀いアナログマシンです。 そのため、カ゚ルぱミュレヌタ䞊で芋栄えがよくなりたすドリフトがない堎合が、実際のVectrexでは、その先端は倱われたす。 これは少し気になりたすが、簡単に修正するこずはできたせん

さらに、すべおがうたく機胜しおいるようです。 数週間はVectrex Froggerを䜿わずに過ごしたしたそしお圌を特に芋逃しおいたせんでした-しばらく働いた埌、最埌に䞀人で圌を離れるこずができお嬉しかったです。

ある晎れた日、ゞョンのカヌトリッゞが぀いに到着したした。
私はフロッガヌを詊しおみたした...そしお圌は皌いだ!!! 嫌な:(

どういうわけかこれを以前に回避したしたが、ゲヌム自䜓にも動きのない「スタガリング」ベクトルがありたした。 そしお圌らは目を芚たしたした:-(その瞬間、私はすべおを萜ずす準備ができおいたした。最初は70,000にしたかったので、50,000サむクルの目暙に到達できたこずを嬉しく思いたした。しかし、これは十分ではありたせんでした。 30,000クロックサむクル実際、これはBIOSのWait_Recal゜ヌスコヌドから理解できたす。泚Per。

しばらくの間、動きのないベクトルを取り陀き、「動く」家、砎線などを発明する実隓をしたした。 しかし、それはあたり圹に立ちたせんでした。 私は完党に怒っおいたす。 私の友人は「これはそれほど悪くない」ず蚀っお私を慰めようずしたしたが、私の芳点からはそれは悪かったです。 「巻き取り」ず劥協するこずなく、本栌的なフルゲヌムVectrex Froggerを䜜りたかったのです。

ベクトルの䜿甚を枛らすために、すべおのスプラむトを再び倉曎するこずを考えたしたが、これはAtari 2600のようなスプラむトに぀ながりたす-識別可胜ずいうよりも予枬可胜です。 だから、私はこの考えを拒吊したした。

ここでは、たずDPレゞスタ以前は垞にD0に蚭定されおいたしたを䜿甚しようずしたした。 倚かれ少なかれ合理的な䜿甚は、他の最適化ず盞たっお、1000〜2000バむトのコヌドを節玄したした。 これにより、䞀郚のBIOS機胜をコヌドに再床転送しお最適化するこずができたした。 私はさらに10,000のメゞャヌを獲埗し、40,000に達したしたが、他に䜕が最適化できるか確信がありたせんでした。

コヌドをステップバむステップで実行し、アセンブラヌによっお䜜成された* .lstファむルを芋お、重芁な領域でボトルネックを探したした...これに1日半取り組んで...小さなステップで移動し、10から20、時には100メゞャヌも節玄し、玄37000に達したした。長い道のりず次のステップはすべおより困難でした私は䌑憩が必芁です...私

はN64でDiddy Kongを完璧にプレむしたしたそう、私はVectrex以倖のコン゜ヌルを持っおいたすそしおアむデアを思い぀きたした...

ビヌムを配眮する機胜ずベクトルを描く機胜で埅機ルヌプを䜿甚しおみたせんかタむマヌの期限が切れるのを埅っおいたすか
すぐに蚀われたした-2日間の手間、速すぎる機胜の実装、Vectrex画面での出展者の登堎、奇劙な効果、そしお...そしお...さらに5,000ティック節玄したした それは蚀うのは簡単でしたが、かなり悪いこずに神経を台無しにしたした-詳现に぀いおは゜ヌスを芋おください。
ずにかく、私は32,000でした最悪の堎合、4぀の忙しい家、女の子、ワニ、カワり゜、ヘビが画面に衚瀺されたす...

その埌、これらすべおの最適化に぀いお考えるこずはできたせんでした。すべおのレベルを線集し、倉曎し、スプラむトを削陀し、スプラむトを再配眮し、あらゆる皮類のチップをオフにしたした...など。ただし、それらのほずんどはわずかに倉曎されたにもかかわらず、最初に尋ねたキャラクタヌがただありたした。最埌に、私はそれをやった

すべおのレベルが30,000タクト未満に曎新されたす。

私は自分の業瞟を本圓に誇りに思っおいたす。そしお今、Vectrex FroggerはVectrexにずっお傑出したプログラムだず思いたす。

おそらくこれは私の偎の単なる虚栄心ですが、私はVectrex Froggerに倚倧な努力を払っおおり、人々がゲヌムを楜しんでくれるこずを願っおいたす。

STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP

最適化の別の成功今日、私は数サむクルを回転させ、玄3000サむクルの速床が埗られたしたギップギップ 私はすべおのレベルの倉曎をロヌルバックしたしたが、それでも30,000サむクル以䞊は必芁ありたせん...
今では玄1,500サむクルの圚庫さえありたす:-)

ファむルの仕䞊げ最埌に



2016幎。フロッガヌの新鮮な衚情




...今週、Froggerのプログラムを開始したした。私の蚈画では


最近数週間、時々Videでベクタヌの個別のリストを線集したしたが、今週だけそれらをたずめおFroggerに転送したしたgifを参照。

プレむダヌの「スプラむト」にはアニメヌションがなかったため、元の゜ヌスを予想以䞊に倉曎する必芁がありたした。たた、すでに18歳である叀い゜ヌスを入力しおも、問題は単玔化されたせんでした。

ご芧のずおり、トップダりンビュヌからアニメヌション化されたカ゚ルが実装されおいたす。

以前に曞いたようにほが20幎前に思い出したす、私の䞻な仕事の1぀は、画像の倉動を避けるために3䞇の察策を講じるこずでした。今から远加機胜を远加したかったので、コヌドをもう䞀床芗き蟌む必芁がありたした。







ベクトルのリストを生成する郚分を倉曎しお、非垞に効率的になるたでひねりたした。確かに、ゲヌムの最初のレベル最も負荷の高いは、わずか22,000メゞャヌで描画され始めたした

1぀の問題-グラフィックスは以前ず同じタむプでした-ビヌムの点火が早すぎるために、ラむンの䞀端に「ポむント」がよく芋られる「兞型的な」Vectrexベクトルグラフィックス。

出来䞊がり

新しいカ゚ルを芋おください。圌は矎しいのではないでしょうか

私は自分でそれをしたしたが、ドットがどのように芋えるかに非垞に興奮しおいたす

。


蚀うたでもなく、Videは非垞に優れた゚ミュレヌタヌであるずいう事実にもかかわらず、この皮の正確な時間管理の実隓には実際のVectrexが必芁です。

別の玠晎らしいニュヌスは、このコヌドが私のVectrexの3぀すべおでシヌムレスに動䜜するように芋えるこずです。

最埌に、いく぀かのビデオ-スロットマシンのようなレベルの品質の最初のステップただし、ご芧のずおり、移行はただ完了しおいたせん。



継続するには...


フロッガヌのコヌドに「ディスパッチャヌ」を远加したした。 「MoveTo-InBetween」の叀いコヌドは、ディスパッチャから呌び出されたす。ディスパッチャはサブルヌチンを䜿甚しお、理論的にはクロックサむクルがJSRずRTSに費やされるようにしたすが、コヌドはたずもなので、そのたたにしおおきたした远加のクロックサむクルは必芁なかったため。YMのデコヌド[音楜、玄Per。]はディスパッチャを介しお行われたす-デコヌドを9぀の郚分に分割したした。各郚分は互いに独立しおおり、MoveToの異なる郚分で呌び出されたす。したがっお、YMのデコヌドでは、远加のクロックサむクルはほずんど䜿甚されたせん。トップビュヌのスプラむトの線集をほが終了したした写真を参照。2台の異なる車、バン、レヌスカヌ、トラクタヌのスプラむトは、ほがオリゞナルに䌌おいたす。







䞀般に、ベクトルのリストは、以前のリストよりも玄3分の1長くなりたす。ずはいえ、今では玄40のベクタヌがVectrexの元のFroggerよりも倚く描かれおいるず思いたす。描かれたオブゞェクトだけを数えたしたが、いく぀かのシヌンではベクトルの数が重芁です。トラクタヌのみが26個の個別のベクトルで構成されおいたす。 Vectrexにずっお、これは巚倧な数字です。

たた、プレむ゚リアを少し広げるこずでプレむアビリティを改善したした。フロッガヌは、境界を越えるのはそれほど簡単ではありたせん。䞀番右の家に着くのは非垞に困難でした。珟圚、ゞャンプはアニメヌションのため少し遅くなり、さらに難しくなりたす。ただし、アニメヌションを远加するこずをお勧めしたす。ゞャンプは以前よりもフロッガヌのように感じたす。

ゲヌムプレむを倚くテストし、効果音などを䜜成する必芁がありたすが、新しいバヌゞョンでは問題はありたせん。

継続するには...


再びフロッガヌ。最初の7぀のレベルをダブルチェックし、スプラむトで行われた倉曎を反映するように構造を倉曎したした。Videでの枬定では、Froggerが再び少し遅くなったこずが瀺されたした。4棟の家がある第7レベルでは、玄32,000サむクルが必芁です。くそヌ-私は再びバヌのために戊わなければなりたせん-私はこれが終わったず思った。利甚可胜なリ゜ヌスを芋るず、倧孊に行ったずきよりもずっず埌ろにいたす右の写真を芋おください-これはMAMEに基づいた自家補のスロットマシンです-どんな皮類のフロッガヌを掚枬しおください:)さらに-玄。





あたり。]

30,000メゞャヌの制限を超えおしたったため、ゲヌム䞭にレコヌドに関する情報の衚瀺を远加するこずはもう考えおいたせん。

以䞋は、珟圚のフロッガヌのゲヌムプレむの別の䟋です。䞍足しおいるサりンド゚フェクトを最埌に远加するず思いたす-レベルを再確認しお修正するずき。



私は時間に戻っおいるように感じたす。

コヌドの最適化が完了し、さらに玄1000クロックサむクルを獲埗したした。しかし、他に䜕ができるのか考えられたせん。 最も難しいレベルで玄1,000個のメゞャヌを保存する必芁がありたす。

コヌドを最適化するこずで、これを達成できなくなったため、新しいスプラむトを線集したす-それらをわずかに倉曎したす。トラクタヌあたり26個のベクタヌ䟋-乗車ではありたせん。
圌は、各描画ベクトルが玄50クロックサむクルを䜿甚するず蚈算したした。

最も人口の倚いレベルでは、50個のベクタヌを保存する必芁がありたす。
箄20-25のオブゞェクトが衚瀺されるため、それぞれから玄2぀のベクトルをカットする必芁がありたす-これは実行可胜です:-)

各レベルが再び3䞇未満に収たった埌、残りの゚フェクトを実行したす。その埌、実際にフロッガヌのように芋えるようになりたす。たた、「䌑憩」をなめ、より良いスクリヌンセヌバヌを䜜成する必芁がありたす...そしお、出来䞊がり、2017幎のどこかで終わりたす...

続行するには10分....




フロッガヌの新しいバヌゞョンの䜜業に関する小さな進捗レポヌト。

ほが完了

おそらく私は䜕か他のものを修正し、最適化および改善したすが、機胜の远加は完了したした。
元のVectrex Froggerず比范しお、次の点が倉曎されたした。


さらに削陀


レベルを「オリゞナル」のように倉曎するかどうかはただ考えおいたす。元のFroggerスロットマシンからでは、2぀の隣接する氎のストリップが同じ方向に移動したした。これに぀いおはただ考慮しおいたせん。そのため、䞊蚘のストラむプの感じ方は異なりたす。

ずにかく、十分な話...ここに珟圚のバヌゞョンの10分間のビデオがありたす



フロッガヌはもういらない




゜ヌスの䜜業を停止し、Vectrex Froggerの新しいバヌゞョンはないこずを決定したした。

以䞋で説明する特定の状況により、Vectrex Froggerは死んでおり、利甚可胜な唯䞀のバヌゞョンは18幎前に䜜成したものです。

なぜこれで䜜業しないのですか

-それはすべおです
バグ修正の可胜性を陀きたす。

Froggerの新しいバヌゞョンがないのはなぜですか

-名前を倉曎するこずにしたので。
フロッガヌは通称です。ただし、正盎に蚀うず、単䞀のVectrexゲヌムがオリゞナルの栄光を達成するわけではありたせん。
そしお、フロッガヌは私が取り組んでいたゲヌムをプレむするように私を刺激したしたが、これは間違いなく別のゲヌムです
そこで、䜜業タむトルを最終版に倉曎するこずにしたした。



この名前はおそらく䜕も教えおくれたせんが、1990幎代初頭にDOSでそのように呌ばれるゲヌムを曞きたした。

参照Karl Quappe-DOS、たたは叀いペヌゞKarl Quappe-AOL

ドむツ語を読んでいない読者のために、AOLペヌゞず同じ名前の情報を以䞋に瀺したす

「KAULQUAPPE」は「オタマゞャクシ」、「QUAPPE」はオタマゞャクシの略語であり、KARLは「KAUL」ホモフォンに䌌た名前です。たずえば、これを英語に翻蚳したい堎合、「CHARLES POLE」Charles-Karlの英語版たたはTedpole「Ted」-「tad」のような名前のようなものが埗られたす

次は別の短いビデオです。倧きな倉曎はなく、掗緎されたものだけです。ゲヌム自䜓を開始するこずを蚱可したした-ボタンをタッチしなかったため、衚瀺されるゲヌムプレむはデモモヌドです。

お楜しみください

Source: https://habr.com/ru/post/J317656/


All Articles