坂口博信 ナーシャ・ジベリの天才的プログラミングを語る

坂口博信 ナーシャ・ジベリの天才的プログラミングを語る TOKYO M.A.A.D SPIN

坂口博信さん、成田賢さんが2024年6月22日放送のJ-WAVE『ゆう坊とマシリトのKosoKoso放送局』の中で初期『ファイナルファンタジー』シリーズなどを手がけた天才プログラマー、ナーシャ・ジベリについて話していました。

(鳥嶋和彦)やっぱり当時は(開発が)早いよね。

(坂口博信)最長で10ヶ月ですね。

(Naz Chris)ドラクエも早かったんですよね。

(堀井雄二)1なんか半年ぐらいで、2もそのぐらい作っていて。すぐ出したからね。で、3」でやっと1年かかったという話なんで。

(Naz Chris)当時のファミコンのゲームって、そんなもんなんですか? 平均的に1年以内で開発できるんですか?

(堀井雄二)容量が少ないんでね、分量がなかったんだよね。1で64KBしかないんで。そこに絵を入れて、音楽を入れて、プログラムをしてっていう。

(坂口博信)そうですね。成田が言ったようにナーシャっていうのが天才プログラマーなので、早いんですよね。

(成田賢)作るのが早いんですよ。

(Naz Chris)ナーシャ・ジベリさん。

(坂口博信)「僕、今データ待ち」みたいにえらそうに言っているから。「ふざけんなよ、こいつ!」っていう感じだったよね?(笑)。

(成田賢)最後の方は本当に職種関係なく。「はい、じゃあここのマップ、君ね」とか言って。僕もマップ作ってましたもん。「こういうマップを」って言われて「はーい」って。

(鳥嶋和彦)ああ、もう手が空いているところにやらせようと?

(成田賢)もう全部、データを作っていかないと追いつかない感じでした。

(Naz Chris)ナーシャさんとはどこで出会ったというか?

(坂口博信)ナーシャはまた、話が長くなるんですけど。彼はイランの王族で。

(Naz Chris)ええっ?

イラン革命でイランを追い出された王族

(坂口博信)で、イラン革命で追い出されて、アメリカに亡命した人間なんですよね。で、財産を失って、いろいろあってフェラーリ1台になっちゃって。「やべえ、俺、どうやって食っていくんだ?」っていう時にアメリカのパーティーで宮本さんが会って。「お前、うちに来て稼いだらいいじゃん」って言って、宮本さんある日、連れてきて。「坂口、面倒を見ろ」って言われて。その日から僕、もうほとんどしゃべれない英語で彼と2人っきりで毎日……あいつ、ステーキしか食えないんですよ。毎日、ステーキを食って、気持ち悪くなりながら。もう拙い英語で1、2時間ずっと話さなきゃいけないという苦痛の生活でした。

(鳥嶋和彦)すごいね(笑)。

(渋谷員子)ステーキ、私もよくご一緒しました(笑)。

(坂口博信)そうだよね(笑)。あのワンダラーっていう、アメリカナイズされた安いステーキ屋が銀座の裏にあったんですけど。

(鳥嶋和彦)沖縄のあたりにあるみたいなやつだね(笑)。

(Naz Chris)本当にパーティーを作っていくみたいな、ゲームっぽい出会いですね(笑)。

(坂口博信)本当ですね。「革命で追放されたイランの王族」ですよ? そいつが天才プログラマーだったっていう、もしそういうキャラクターを書いたら「嘘っぽいからやめようよ」って言われますよ(笑)。

(鳥嶋和彦)そんな感じだよね。できすぎているよね(笑)。やっぱり図抜けていたんだ。

(成田賢)そうですね。ナーシャの話になるかなと思って、YouTubeでナーシャ・ジベリのことをやってるのをずっと見てたんですけど。正確なものもあるし、不正確なものもやっぱりあるなと思って。でも、たしかに天才でしたね。創意工夫がすごいんですよ。その、ファミコンの前にApple IIっていう、もっと弱いマシンでやってたので、とにかく工夫がすごくて。僕らじゃ思いつかないようなことを平気でやってたので。だから、ファミコンにはぴったりなプログラマーで。

(坂口博信)だったね。CPUが一緒なんですよね。Apple IIとファミコンって。6502っていう、全く同じ……要は、Apple IIで型落ちして安かったから任天堂はたぶん採用したんですね。

(鳥嶋和彦)そういうことか!

(坂口博信)超安価な当時のCPUで。でも彼はそのCPにApple IIで慣れてたので。すごく工夫がいるんですけど、速いCPUだったんですね。6502ってね。

(成田賢)使いようによってね。

(坂口博信)で、命令数は超少ないんだよね。掛け算とかやるのにも、何行も必要なんでしょう?

(成田賢)必要だったっけな?

(坂口博信)なんかLDAでアキュムレータに入れて……とか。

(成田賢)ああ、それはアセンブラですからね。

(鳥嶋和彦)やっぱり成田さん、プロのプログラマーとしてはやっぱり、すごいと思ったんだ?

ファミコンのCPU・6502に精通していた

(成田賢)なんて言うんですかね? 遅いコンピュータなので、なるべく命令数を減らせば速く動くわけなんですね。その減らし方が上手いんですね。あと、ファミコン通常の説明書に書いてあるやるやり方と違うやり方でハードウェアをプログラム上でいじっていくんですよ。そうすると「ああ、こんな風になるんだ」っていうのを探って見つけ出して。それをゲームの中に使うのがすごいうまかったです。

(鳥嶋和彦)そこで発見と工夫があるんだ。

(成田賢)本当にそうなんですよ。

(鳥嶋和彦)センスなんだね。プログラムって、なんか理詰めで組んでいくっていう、その感じしかないんだけど、違うんだ。

(坂口博信)当時は特にそうなんです。ブラウン管じゃないですか。で、その走査線を描いてない時間を使って計算するみたいな。ある意味、画像にブラウン管で表示するタイミングも把握しながらっていう、ちょっと理詰めだけじゃないところがあって。その時に……「描いている途中で何か、それを切り替えたら表示が面白く歪むじゃん」みたいなことはいつ考え出すんですよ。で、歪んだら「ああ、なんか3Dになっちゃった」みたいな。

(渋谷員子)『ハイウェイスター』の道とか、そうですよね。私、ナーシャがずっとここにいて、言われるがままにここにドットを打っていたんですよ。

(成田賢)それが変な幾何学模様なんですよ。

(渋谷員子)そう。「ここにちっちゃい、横3ドットぐらいの線をいっぱいいっぱい書いて」って言われて。「ここは白、ここは赤、グレー」みたいな。全て指示されて。

(鳥嶋和彦)やってる時に何かわかんないですね?

(渋谷員子)全然わかんないんですけど。それをいっぱい書いていって。それが道になって、やってきたっていう(笑)。

(坂口博信)そう。彼はわかっていて。その図形も「こうプログラムすると、こうなるはずだ」っていうね。あれ、感動だったね。

(渋谷員子)びっくりした(笑)。

ナーシャの指示通りにドットを打ってできた『アウトラン』の道

(坂口博信)ナーシャ、変なやつなんですよ。

(鳥嶋和彦)でも、途中でやめちゃったんだ。

(坂口博信)「途中で」っていうか、ねえ。

(堀井雄二)いつまでいたの?

(坂口博信)3までですね。

(鳥嶋和彦)なんでやめちゃったの? 今、どうしてるの?

(成田賢)やめたいんじゃないですよね。

(坂口博信)まあ「僕が」っていう感じですか?

(成田賢)僕、4からメインプログラマーをやっていて。それで、僕にした方が安いんですよ。

(鳥嶋和彦)ああ、そういうことか。

(坂口博信)そっち?(笑)。でも、僕としてはちょっとつらかったですね。やっぱり英語ベースで……いいことなんですけど。彼の技術ベースで物を作ってたので。それをもうちょっと、スーパーファミコンCPUもよくなるじゃないですか。逆に、その走査線を変にいじってねじ曲げるみたいなテクニックじゃなくて、理詰めのプログラムとデータで作りたかったんですよ。RPGだし。

(鳥嶋和彦)4から、スーパーファミコン?

(坂口博信)そうです。なので、ちょっと作り方を変えたかったんですよね。だから当時は、ファミコンの頃はイベントで、たとえば砂漠から塔が現れるとかいうのも一生懸命、絵を書いてナーシャに渡すとナーシャがプログラムで塔を「ズズズズズッ」なんてやるんですけど。それをやってたら、とてもその間に合わないんですよ。制作期間が。いちいち全部、ナーシャが作っていたら。なので、スクリプトっていう簡易言語で僕ら、ゲームデザイナー側が作れるようにして。成田とかプログラマーはエンジンを作るだけ。本当にそうしたかったんです。という真面目な理由があるんだよ?(笑)。

(成田賢)いや、わかります。

(坂口博信)結果、安くなったけどね(笑)。

1人の天才ではなく、チームで開発する体制になった

(鳥嶋和彦)要するに、ファミコンからスーパーファミコンに変わって、作り方も個人の裁量でやるよりも、集団でチームを組んでやるっていうやり方に変わったっていう?

(成田賢)そういうやり方をしても、処理が間に合うようになったっていうのが正しいですよね。

(坂口博信)そうですね、そうですね。天才的なテクニックを使わなくても、表現ができるので。組織力を増した方が早く良いものが作れるっていう。

(鳥嶋和彦)今、彼はどうしてるんだろうね? そこまで聞くとちょっと興味があるんだけども。

(坂口博信)ええとね、5年ぐらい経っちゃうけど。前に連絡したら、元気にしてて。パソコンなんていうんでしょう? グラフィックのツール系。今だと写真加工ソフトとか、あるじゃないですか。ああいうのを作ってましたね。今も元気にプログラマーやっています。

(堀井雄二)歳はいくつぐらい?

(成田賢)僕の10上だから、たぶん67とかですね。

(堀井雄二)じゃあ結構、行っているんだね。

(坂口博信)でもまだ、若いよね。そういう意味じゃあね。

<書き起こしおわり>

坂口博信『ファイナルファンタジー』飛空艇演出を語る
坂口博信さんが2024年6月22日放送のJ-WAVE『ゆう坊とマシリトのKosoKoso放送局』の中で『ファイナルファンタジー1』開発についてトーク。シリーズの象徴的な乗り物・飛空艇の誕生について話していました。
',b.captions&&s){var u=J("figcaption");u.id="baguetteBox-figcaption-"+t,u.innerHTML=s,l.appendChild(u)}e.appendChild(l);var c=J("img");c.onload=function(){var e=document.querySelector("#baguette-img-"+t+" .baguetteBox-spinner");l.removeChild(e),!b.async&&n&&n()},c.setAttribute("src",r),c.alt=a&&a.alt||"",b.titleTag&&s&&(c.title=s),l.appendChild(c),b.async&&n&&n()}}function X(){return M(o+1)}function D(){return M(o-1)}function M(e,t){return!n&&0<=e&&e=k.length?(b.animation&&O("right"),!1):(q(o=e,function(){z(o),V(o)}),R(),b.onChange&&b.onChange(o,k.length),!0)}function O(e){l.className="bounce-from-"+e,setTimeout(function(){l.className=""},400)}function R(){var e=100*-o+"%";"fadeIn"===b.animation?(l.style.opacity=0,setTimeout(function(){m.transforms?l.style.transform=l.style.webkitTransform="translate3d("+e+",0,0)":l.style.left=e,l.style.opacity=1},400)):m.transforms?l.style.transform=l.style.webkitTransform="translate3d("+e+",0,0)":l.style.left=e}function z(e){e-o>=b.preload||q(e+1,function(){z(e+1)})}function V(e){o-e>=b.preload||q(e-1,function(){V(e-1)})}function U(e,t,n,o){e.addEventListener?e.addEventListener(t,n,o):e.attachEvent("on"+t,function(e){(e=e||window.event).target=e.target||e.srcElement,n(e)})}function W(e,t,n,o){e.removeEventListener?e.removeEventListener(t,n,o):e.detachEvent("on"+t,n)}function G(e){return document.getElementById(e)}function J(e){return document.createElement(e)}return[].forEach||(Array.prototype.forEach=function(e,t){for(var n=0;n","http://www.w3.org/2000/svg"===(e.firstChild&&e.firstChild.namespaceURI)}(),m.passiveEvents=function i(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("test",null,t)}catch(n){}return e}(),function a(){if(r=G("baguetteBox-overlay"))return l=G("baguetteBox-slider"),u=G("previous-button"),c=G("next-button"),void(d=G("close-button"));(r=J("div")).setAttribute("role","dialog"),r.id="baguetteBox-overlay",document.getElementsByTagName("body")[0].appendChild(r),(l=J("div")).id="baguetteBox-slider",r.appendChild(l),(u=J("button")).setAttribute("type","button"),u.id="previous-button",u.setAttribute("aria-label","Previous"),u.innerHTML=m.svg?f:"<",r.appendChild(u),(c=J("button")).setAttribute("type","button"),c.id="next-button",c.setAttribute("aria-label","Next"),c.innerHTML=m.svg?g:">",r.appendChild(c),(d=J("button")).setAttribute("type","button"),d.id="close-button",d.setAttribute("aria-label","Close"),d.innerHTML=m.svg?p:"×",r.appendChild(d),u.className=c.className=d.className="baguetteBox-button",function n(){var e=m.passiveEvents?{passive:!1}:null,t=m.passiveEvents?{passive:!0}:null;U(r,"click",x),U(u,"click",E),U(c,"click",C),U(d,"click",B),U(l,"contextmenu",A),U(r,"touchstart",T,t),U(r,"touchmove",N,e),U(r,"touchend",L),U(document,"focus",P,!0)}()}(),S(e),function s(e,a){var t=document.querySelectorAll(e),n={galleries:[],nodeList:t};return w[e]=n,[].forEach.call(t,function(e){a&&a.filter&&(y=a.filter);var t=[];if(t="A"===e.tagName?[e]:e.getElementsByTagName("a"),0!==(t=[].filter.call(t,function(e){if(-1===e.className.indexOf(a&&a.ignoreClass))return y.test(e.href)})).length){var i=[];[].forEach.call(t,function(e,t){var n=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1,H(i,a),I(t)},o={eventHandler:n,imageElement:e};U(e,"click",n),i.push(o)}),n.galleries.push(i)}}),n.galleries}(e,t)},show:M,showNext:X,showPrevious:D,hide:j,destroy:function e(){!function n(){var e=m.passiveEvents?{passive:!1}:null,t=m.passiveEvents?{passive:!0}:null;W(r,"click",x),W(u,"click",E),W(c,"click",C),W(d,"click",B),W(l,"contextmenu",A),W(r,"touchstart",T,t),W(r,"touchmove",N,e),W(r,"touchend",L),W(document,"focus",P,!0)}(),function t(){for(var e in w)w.hasOwnProperty(e)&&S(e)}(),W(document,"keydown",F),document.getElementsByTagName("body")[0].removeChild(document.getElementById("baguetteBox-overlay")),w={},h=[],o=0}}})
タイトルとURLをコピーしました