[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
「80年代マイコンナイト」というイベントがありました。
長くなったので、前半です
http://tcc.nifty.com/cs/catalog/tcc_schedule/catalog_140828204679_1.htm
1980年代当時 マイコン少年だったみんなが集う そんなイベントです。
「PC98」とか、「MSX」とかのワードが飛び交う
ゲストも
櫛田ナム子氏 (元・ログインスタッフ)
ロンドン小林氏 (元・MSXマガジンスタッフ)
呉英二氏 (呉ソフトウェア工房・社長)
と、とても豪華な面々
おっさん世代ばかりが集う、素敵なイベントでした。
特に台本があって話するわけではなく
一つ一つ題材について雑談するようなノリで
なかなか濃い話題が飛び交い続きました。
それにしても、会場内のBGMは 「ラストハルマゲドン」「イース」をはじめ、
いろいろなレトロPCゲームのBGM集になっていて それだけでワクワクする楽しい空間でした
後は、「パソコンサンデー」の曲が流れたりとか
--------------------------------------------------------
●80年代マイコン大百科
今回のイベントを開くことになったきっかけ
この本自体は、筆者の家に ガレージ一つ分の 当時のPC雑誌があり
(大変羨ましい!)
それをアーカイブ化しよう として、作られた本。
内容的に、MSX分が弱いのは 奥が深くて、それだけで1冊できてしまう程なので
あえて取り上げなかった との事
--------------------------------------------------------
●PCハードの話
・PC6001
しゃべるパピコン
当時は 一番欲しいPCハードでしたよね
→ 「こんにちはマイコン」の影響
→→ 当時、PCを買ってもらえなかった少年は
「こんにちはマイコン」の付録 実物大キーボードを使って
載っているプログラムを打ち込んだつもりになったと言う・・・
・MZシリーズ
熱狂的なファンが多いと言う、SHARPのPC
SHARPと言えば、「パソコンサンデー」
→ あの頃は、日曜の朝に そんな濃い番組やってて 凄い時代だったなぁ
・FM8
バブルメモリって なんだったんでしょうね・・・
→ コナミのバブルシステムとは違いますよね
ポプコムで CGプログラムが掲載されていたのだけれども
PC88とかでは、絵を描くとき LINE文を駆使して描かないといけないところを
FM8では、CONNECT文を使って簡単に描ける
→ じゃあ、FM7を買えば ラムちゃんがたくさん描けるぞ!
(そんな時代です)
→→ けど、FM7のゲームって 5キーを押さないと 自機が止まらないしなぁ・・・
(ハードの性質上、キーを押した という情報は取れても キーを離したという情報が取れなかった。
そのため 新たにキーを押さないと 指を離していても直前のキーが押され続けていると判定してしまう。
なので、移動したら 2468キーで移動したら わざわざ5キーを押さないとキャラが止まってくれない)
・MSX
どれくらいの人が MSX持っていましたか? → さすが、なかなか居ますね
この中で MSX1 持っていた方 → あまり居ないですね
ほとんどの人は、MSX2でしょうね
MSX2+を持っていた方は? → この時点でパラパラ
まさか、MSXTurboR 持っていた人なんて 居ますか?
→ 持っているだけで笑いが起きる MSX TurboR
(せっき~は、もちろん持っています)
5~6万円くらい、テレビに接続できるホームコンピューターという位置づけで
ビルゲイツと西和彦の企画の物 生まれた。
(MSXは MicrosoftX の略 だけれども
Matsushita Sony X の略だ・・・ という説も)
カシオのみ 29800円という、恐ろしく安いMSXを発売した
→ ただし メモリは8KByteしか積まれていなかった・・・
→ コナミのゲームだけは、全て 8KByteのMSXでも動くように作られていて
凄かった。
MSX2は いいPCだったので 沢山売れた。
この頃がMSXの全盛期
→ しかし、ファミコンの発売
→→ MSX2+、MSXTurboRと発売していったけど
時代には勝てず、消えてしまった・・・
しかし、MSXは ファミコンでも パソコンでもない独自の文化が作られ
今見ると MSXが果たした役割は大きかった。
→ ゲームコンストラクションツールが確立したのは MSX
シューティングゲーム・ツクール (吉田工務店、吉田建設、吉田コンツェルン)
RPG・ツクール (DANTE)
→ また、メタルギアが生まれたのも MSXです。
・この頃のパソコン通信って言えば 音響カプラですよね!
→ 今でも、音響カプラって使えるの??
→→ 黒電話だったら使えます。
しかし、300ボー の通信速度って・・・ 今考えると・・・
--------------------------------------------------------
●PCゲーム雑誌の話
多くのPCゲーム雑誌は、創刊当初はゲーム主体の内容ではなかった。
科学総合雑誌とか、そのような感じ
内容も、お堅い 真面目な物が多くて
途中から、ゲーム系の内容にシフトしていった。
ログインも、「コンピューターもしまいには笑う」という特集号の後
おふざけ路線に進んでいった。
・ログインで、アメリカのソフト売上ランキングとか 良くわからないコーナーもありましたよね
誰得だったんでしょう?
→ ログインが期待されていたのは、良くわからないけど なんかカッコいい情報
なんか凄そうな内容
→→ そういった点からすると、こういうコーナーも大事
・ログインは途中から、月2冊発行になった。
→ 編集者はとても大変で、足軽という身分のアルバイトをたくさん増員した。
(櫛田ナム子氏は それで入った。
ちなみに 忍者増田は、スカウトによるエリート枠)
→→ みんな、壁に向かった机に並べられていて
先輩が「仕事空いてる?」と聞かれると それを取り合って記事書いた。
時給500円スタート
・当時のゲーム画面写真は、実際カメラで撮っていた。
(ビデオプリンタもあったけれども)
→ とあるゲームの地図を全部写真で撮って 貼り付けたところ
フィルムの現像に100万円かかってしまった。
→→ 怒られるところだった
・ポプコムといえば
「三遊亭円丈のドラゴンスレイヤー」のコーナー
→ 今こんなん書いたら絶対怒られるよ
っていうような内容(ゲームの批判)が たくさん書かれていて凄い
→→ この頃って、ちょっとゲームの悪口を書いても 許される風潮だった
・コンプティーク
ファミコン版ゼビウスの 裏ワザ情報の記事を載せた時にブレイクした。
(隠しコマンドで 無敵になれる)
→ ファミコン少年がこぞって買って行った
(ちょっとえっちなゲームとかも取り扱っていたのに)
・テクノポリス
市販ゲームの改造コーナーがあって 問題だった
→ BPSとは それで大喧嘩になったみたい
(ブラックオニキスのキャラクターデータ改造ツールで)
→→ 謝罪記事を載せていたけど、「けど、俺たちは悪くないぞ」な論調だった。
・ポプコムは ラムちゃん推しで
テクポリは ミンキーモモ推しでしたね
--------------------------------------------------------
と、こんな内容でした。
濃いなぁ
こんな話が、今聞けるとは 楽しい
ここで休憩が入ったので 記事も いったん、ここで切ります。
次は 一番楽しみな、PCゲームの話題に移ります。
特に、呉ソフトウェアの呉さんのお話があり 本当に楽しい内容でした。
そう考えると、一記事では収まり切りませんよね
という事で 後半に続きます。
http://sekigames.gg-blog.com/Entry/293/
↓ 休憩時間に、閲覧自由な 当時のPC雑誌を 皆で読みふけるの図
「ゲーム世界を動かすサイコロの正体 ~ 往年のナムコタイトルから学ぶ乱数の進化と応用」
より、
乱数を使った ドルアーガの塔の 迷路生成のアリゴリズムについて紹介です。
講演内容は、こちらです http://sekigames.gg-blog.com/Entry/288/
講演者の方も、
「ナムコの乱数を取り上げるなら、ドルアーガの塔をせざるえない」
という程、外せない内容との事です
「このテーマだけで講演時間を全て使っても説明しきれない」
(講演では、時間の関係で 触りのみでしたので
ある程度、せっき~の解釈で補完しています)
--------------------------------------------------------------------
●概要
ドルアーガの塔の 各ステージの迷路は、全てランダムで生成されています。
各ステージで、8ビット(0~255)の乱数のseed値を与え、乱数を作っています。
(seed値が同じなため、何度プレイしても 同じ結果になります
ドルアーガの塔の全ステージデータは 60バイトと、容量削減に繋がっています)
↑ こちら、誤りでした。
各階のseed値は 1階は1、2階は2 と 階数をseed値として初期化している との事です。
ドルアーガの塔のステージデータは 60バイトすら 必要ありませんでした。
後述の理由で、60階のseed値だけ 特別 255 で初期化されています。
各柱から ランダムで壁を伸ばします。
2ビットの乱数 (0~3)を取得し
00: 上に伸びる壁
01: 下に伸びる壁
10: 右に伸びる壁
11: 左に伸びる壁
伸ばした先の柱が、「外壁」 or 「既に壁がある柱」 だった場合
新たに「壁のない柱」から スタート
そうでなければ、伸ばした先の柱 で 同じ処理を行う
→
これを繰り返し、全ての柱に 壁があるなら迷路完成
--------------------------------------------------------------------
●しかし
完全にランダムに迷路を作った場合
とても複雑な迷路になって、足の遅いギルだと 制限時間内にゴールできないかも?
↑ 完全ランダムで作られた複雑な迷路
ここで、ドルアーガの塔 の乱数アルゴリズムの工夫が活きます。
--------------------------------------------------------------------
●線形帰還シフトレジスタ の使い方に工夫
詳しくは、乱数講演本編を参照ですが
(http://sekigames.gg-blog.com/Entry/288/)
ドルアーガの塔は、線形帰還シフトレジスタ を使っています。
このアルゴリズムは、1ビットの乱数を生成するアルゴリズムです。
2ビットの乱数を作るのであれば 本来、線形帰還シフトレジスタの処理を2回すれば良いのですが
ドルアーガの塔では、
線形帰還シフトレジスタ で得た 乱数の1ビットと
前回得た乱数 1ビット
を使って 2ビットを生成しています。
前回、生まれた乱数が 1だった場合
次の壁は
10: 右に伸びる壁
11: 左に伸びる壁
右に伸びる壁(10) の後は、
必ず 上に伸びる壁(00)か、下に伸びる壁(01) になります。
となると、
右下へのジグザグ壁 というのが生まれやすい
(10 → 01 → 10 → 01 → 10 → 01 → )
--------------------------------------------------------------------
●更には
ドルアーガの塔で有名な 最終面のステージ
これは、seed値に 0xff を与えると生まれます。
線形帰還シフトレジスタ の弱点として、特定のseed値を与えると 同じ結果ばかりを返す
というものがあります。
今回の例の場合、1を返し続けたのですね
その結果、左に伸びる壁 (11) を生み続けて、あのような迷路が作られました。
本来、線形帰還シフトレジスタ の弱点ともいえる挙動なのですが
それすら、ゲームデザインとして見事に活用されたのは 頭が下がります。
--------------------------------------------------------------------
●まとめ
このようにして、ドルアーガの塔の迷路は作られています。
迷路を作るアルゴリズム なんてものは、いろいろあると思いますが
このように、線形帰還シフトレジスタ の特性を活かしたアルゴリズム というのは ならではと思います。
ここが、講演者によると ドルアーガの味との事ですが
大変面白いお話でした。
2014年9月3日 にあった、CEDECの講演についての記事です。
事前登録者数45万人を獲得した施策『フライングゲットガチャ』
良策を連発する為の異業種協業体制とは!?
サイバーコネクトツーより リリースされた「フルボッコヒーローズ」
セミナー表題は フライングガチャについて ですが
この講演をCEDECに応募したのは これより6ヶ月前
その時より、いろいろな事があり
売り上げ大きく落ちてしまいました
半分は、その反省について のお話になりました。
--------------------------------------------------------------------
●フルボッコヒーローズって?
STG + RPGの、スマホゲーム
・プロモーションでの方針
完全新作なので 最初にユーザーを集めないと 他社製品に太刀打ちできない
→ 事前登録 > 事後登録
とした
今までのプロモーション ・・・
質の良いコンテンツ + ネット広告 ← お金がかかる
これからのプロモーション
事前登録 + バイラルを狙った施策
今までにないプロモーション手法で、事前に狙ってバイラルを起こし
インストールを最大化させる!
・フライングゲットガチャ について
バイラルが起きて、さらにゲームユーザーに喜んでもらえる事ってなんだろう?
→ そういえば、リセットマラソンって大変だよね
(強いキャラクターが欲しい)
→ じゃあ、最初から簡単にできる仕組みを作っちゃおう
(ユーザーも強いキャラクターが手に入るし
ゲームの序盤も、サクサク進むようになる)
→→ フライングゲットガチャの誕生
・フライングゲットガチャ の流れ
事前登録
→ 公式サイトで フライングゲットガチャを回す
→→ ガチャゲット
(シリアルNoをプレイヤーに送る)
→→ 1日で回せる回数を制限
→→→ 更に回したければ、SNSで拡散してもらうと 更に回せるようになる
・フライングゲットガチャ 結果
事前登録者数 48万件
フライングゲットガチャ 996万回転
Tweet数 140万つぶやき
配信開始2日目で 総合無料5位
事前登録者と自然流入者で、継続者 約3倍 課金率 約6倍
→ かなり効果が高かった
(普通 事前登録というと 1~2万件が普通
良くて 3~4万件の中)
--------------------------------------------------------------------
●コンソールメーカーとスマホアプリメーカー の共同作成について
文化の違う、2の会社で開発を行いました。
ドリコム: サバー側
サイバーコネクトツー: アプリ側
しかし・・・
・「開発言語」の違いで苦労
ディレクター → プランナーを指す (ドリコム)
開発責任者を指す (サイバーコネクトツー)
エンジニア → プログラマを指す (ドリコム)
使用しない (サイバーコネクトツー)
クライアント → アプリプログラムを指す (ドリコム)
依頼会社、顧客を指す (サイバーコネクトツー)
BU → 5日連続ログインユーザー数 (ドリコム)
使用しない (サイバーコネクトツー)
初期のミーティングでは、お互い話が一切かみ合わなかった
・スケジュール感覚の違いで苦労
β版提出後
ドリコム側 「リリース直前まで改良を続けよう」
ブレストを重ねて、更にブラッシュアップしていく段階
サイバーコネクト側 「残り1ヶ月 完成に向けて調整しよう」
仕様はFIX
バグ修正と調整を行う段階。
全体スケジュール
ドリコム側 リスクヘッジを組み込んだ上で スケジュールを組んでいた
サイバーコネクト側 想定上最善の流れでスケジュールを組んでいた
→ 両社で実装を別々に完結させようとしている間は問題なかったが
お互い密接した作業を行うようになってから 徐々に歪みが発生
・データベース設計に対する考え方のズレ
ドリコム側
パフォーマンスを重視し、サーバーサイドとしては正しい考え方でデータベースやAPIを設計
サイバーコネクト側
運用時の管理のし易さを考えて、ゲームデータを入力し易い形でローカルデータベースを設計
→ この問題は特に大きく、両者設計の整合性を取るのに 非常に時間を消費
結果として、開発後半の大事な時期に 1ヶ月の開発遅延を生んだ
・どう解決させたか?
→ サイバーコネクトツー社内に席を用意し、駐在してもらった
常に顔を突き合わせられる環境を用意した事で じきに問題が起きなくなってきた
・2社開発を行ったメリット
ドリコム側 ネイティブアプリにおける開発ノウハウを得られた
サイバーコネクト側 サーバーを担当してもらった事で、アプリ部分の開発に集中できた
最初は 連携など、うまくいかなかったところもあったけれども
お互いの強みを活かす事ができた
--------------------------------------------------------------------
●フルボッコヒーローズの現状
売り上げの伸び悩み
→ リリースから6ヶ月間、売り上げが下がり続けている
大体・・・
2ヶ月目 初月の8割 売上
3ヶ月目 初月の6割 売上
4ヶ月目 初月の4割 売上
5ヶ月目 初月の2割 売上
8月にある試作を行い、少し回復した
フライングゲットガチャによって、とても良いスタートダッシュは切れたけれども
やり方間違えたり、運営で失敗すると 6カ月でここまで売り上げが下がってしまうという
一つの事例として見て欲しい
--------------------------------------------------------------------
●ここから ぶっちゃけた話
なんか、反省会がはじまりましたww
(この反省会の雰囲気は、ニコ生タイムシフト視聴で 実際、見てもらうしかありません)
・6ヵ月の運営を通じて
事前登録者数の勢い、初月の印象だっと
もっと伸びておかしくないタイトルだっただけに、自分の力をふがいなく感じた
→ コンシューマー上がりで 慣れていなかったとはいえ
今、6ヵ月前に自分を振り返ると わかっていない所が多かった
・ユーザーの期待を裏切ってしまった
→ 運用コストが高くて、新しいイベントなどを次々と提供できなかった
このゲームは、バトルを楽しんでもらうのが 最大のコンセプト
→ しかし STGなので
キャラクターを増やすたび、面白い挙動・ショット を用意していかないといけない
レベルデザイン・ゲームデザイン・バランス これを全てこなさないといけない
→→ 面白いゲームを提供をし続けるのが、難しかった
→ しかし、これは開発開始時からわかっていた事で
大変だけれども、これは絶対面白い物になる という考えの元、スタートした
→→ キャラクターのパラメーターだけで一喜一憂できるのは ほんの1ヶ月
後は惰性で続けるような物
→→ そこからユーザーを繋ぎ止めるのは ゲーム自体の面白さ
ファミコン時代の原始的な面白さ
触っているだけで楽しい、また明日も遊びたくなる
そこで喜んでもらおうと考えた
・バトルの面白さは実現できている
→ しかし 面白さを ユーザーに長く楽しんで貰えるための施策が足りていなかった
→ 多様なキャラのバリエーション
プレイングによる向上
これを実現しうるコンセプトになっていなかった
・8月になり 右肩下がりだった売り上げが改善した
運営の仕方をガラっと変えた
→ ゲームの内容や、運営に関して、サイバーコネクトツーが主導権を握って進めた
→→ ここから フルボッコヒーローズver2.0 として生まれ変わります。
→→ 我々は 半年間で、とても反省しました。
反省した後の我々は強いですよ!
これからの フルボッコヒーローズを 見ていてください。
ちなみに、サイバーコネクトツーの全社員に 「フルボッコヒーローズ」の現状は伝えています。
(福岡本社180人 、東京スタジオ 40人、
家庭用ゲーム、スマホアプリスタッフ関係なく全員に)
→ 具体的な数字と、「これが最後の戦いである」という宣言と
→→ 「フルボッコヒーローズ」は サイバーコネクトツーのゲームなので 何か気付く事があれば言って欲しい とも
すると、部署・役職 関係なく 多くの意見、アイデアが貰えるようになった
定時後にも、何か可能なら手伝えることはないか という声も
2014年9月4日 にあった、CEDECの講演についての記事です。
執筆のススメ ~会社勤めをしながら著述賞をとる方法~
「ゲームを動かす技術と発想」を執筆した 堂前氏
「ゲームの作り方 Unityで覚える遊びのアルゴリズム」を執筆した 加藤氏
共に、バンダイナムコの社員の方ですが (プログラマ)
仕事をしながら いかに書籍の出版にいたったか
についてのお話です。
--------------------------------------------------------------------
●本の紹介
「ゲームを動かす技術と発想」
2012年9月刊行
CEDEC2013 著述賞を受賞
ゲームの基礎挙動をソースを使わず図で解説。
→ 主に非プログラマや 学生向け
ほぼ一人で執筆
スケジュールは 2012年2月 ~ 8月 (約半年)
「ゲームの作り方 Unityで覚える遊びのアルゴリズム」
2013年2月刊行
10本のミニゲームを題材に、Unityでゲームの作り方を解説
社内の大勢の人の力を借りて制作された との事
(社内の人が 個人で作ったミニゲームを Unityに移植して使わせてもらった)
--------------------------------------------------------------------
●本を書こうとしたきっかけ
「ゲームを動かす技術と発想」
・プログラマ以外の人に向けて、ゲームの内部動作がよくわかる教材を作ろうと思った
→ 例えば 「デプスバッファ」って プログラマなら知っているけど
非プログラマって それを知れる機会って無いですよね
・「プログラムって難しそう」というイメージを払拭できればいいな
・仕事で関わっているゲームが評価されたとしても それはチームが評価されている事
→ ゲーム業界の人間として、個人として 評価されたかった
「ゲームの作り方 Unityで覚える遊びのアルゴリズム」
・仕事で先輩に、ゲーム作りの面白さや ゲームの作り方を教わった
→ 自分も、同じように 次の世代に伝えたい
・Unityで ミニゲームを10本作って、そのTipsをまとめよう と思いついた
→ 自分の思い付きを 他の人が先を越されたら悔しい
→ じゃあ、もう書いちゃえ
・会社の偉い人が 「最近の社員は大人しいな」と言っている話を聞いた
→ じゃあ、なんかやってみよう
--------------------------------------------------------------------
●執筆にあたって
大事なのは、本業をおろそかにしてはいけない
という事
「ゲームを動かす技術と発想」
・一人で執筆した
モチベーションを保つのが大変
業務外で 本当に執筆できるのか? (時間、体力)
→ ほとんど 通勤時間を利用して書きあげた
わざと各停電車を利用
座れるし、まとまった時間(片道1時間)が取れる。
ゲーム機など持ちこまなければ、執筆する以外になくなる
→ 無理やり 時間を作る仕組み にして、解決させた。
・図をどうやって用意したか?
しかし、絵心無い・・・
→ Keynote(プレゼンツール)を使用
四角、円、矢印 の組み合わせで作り上げた
(一部、商用フリー素材・フリーのデザイナーに仕事依頼)
・レイアウトなどは 出版社にお任せした。
向こうの方がプロなので
--------------------------------------------------------------------
●執筆して良かった事
「ゲームを動かす技術と発想」
・感想が貰えた
→ 主に、Twitter
否定的な意見も参考になる
(予想外に、プログラマの方からの評価が良かった)
・大学の講義のお誘いが入った
・社内での変化は 思ったほどなかった・・・
→ 特に 社内研修の資料として使われるわけでもなく
→→→ いろいろ苦労したけれども、書いて良かった
「ゲームの作り方 Unityで覚える遊びのアルゴリズム」
・印税でがっぽり みたいな景気の良い話はないです・・・
・CEDECで 「本買いました」と話しかけられた
・社内で、Unity絡みで 声をかけられる事が増えた
・GameJamのイベントに声をかけられて 運営として参加。
・自分の後に、社内で 本を書こうという人が増えた。
--------------------------------------------------------------------
●本を執筆しようか と考えている人にむけて
「ゲームを動かす技術と発想」
業務外とはいえ、社内で許可をちゃんと得ましょう。
本業との兼ね合いは 結構大変
→ だからこそ、本業をおろそかにしてはいけない
ターゲット層は しっかり定める。
「ゲームの作り方 Unityで覚える遊びのアルゴリズム」
書こうかどうか 迷っているのなら、書きましょう
やる気 だけは、自分だけの問題。
そこだけは、自分で頑張ってもらうしかない
→ 逆に言うと、そこ以外は 他の人に助けてもらう事ができる
(サンプルプログラム欲しい、図解とか 挿絵が欲しい)
--------------------------------------------------------------------
●質疑応答より
・出版社と どのようにコンタクトしたか?
社内の人間に 出版社と繋がりある人がいたので 紹介してもらった。
企画書を書き、打ち合わせの場を設けてもらい
出版する事が決まった。
(執筆は、決定後に開始した)
2014年9月4日 にあった、CEDECの講演についての記事です。
ゲーム世界を動かすサイコロの正体 ~
往年のナムコタイトルから学ぶ乱数の進化と応用
バンダイナムコのプログラマさんより乱数の講演です。
・ゲームで使われている主要な乱数のしくみについて
・乱数のアルゴリズムが改良されていく歴史
・乱数の選択の注意点
などについて、取り上げられました。
(乱数分布などは せっかくなので 初め、自分で乱数プログラム組んで 用意しようかと思ったのですが
力尽きてしまい・・・
撮影した写真を使わせていただきました)
--------------------------------------------------------------------
●はじめに
・真の乱数
→ 実際のサイコロ
予測不可能
再現不可能
・疑似乱数
→ ゲームプログラムで使われているのは こちら
でたらめに見えるが、法則性があり 実はすべて未来が決まっている
いつかは元の数字に戻る (周期がある)
●乱数の要素
・種 (seed)
・種を更新する アルゴリズム
・出力変換アダプタ
(更新された種を 使いやすい形に変換する)
●今回の講演にむけて
ナムコから発売された、初期の業務用、家庭用 約50タイトルのプログラム(アセンブラ)を解析し
乱数アルゴリズムが どのように遷移していったのか 調査しました。
業務用: 1980年代 (8ビット)
家庭用: 1980年代前半 (MSX,ファミコン)
ちなみに、8ビットCPU というと・・・
扱える数字 0~255
メモリ空間 16 ~ 64KByte
計算に使用できるレジスタ 1~2個
掛け算、割り算 できない
float ない
--------------------------------------------------------------------
●混沌な時代
・手探りで乱数を模索
VSyncカウンタ(画面同期カウンタ)の利用
・・・ プレイヤーがボタンを押した瞬間の VSyncカウンタを乱数として使用する方法
テーブル(乱数表)を参照する方法
→ しかし、「乱数表」を用意するメモリは勿体ない
・パックマンでは
プログラムのROM内のメモリを乱数表と見立てて使用する方法
実装例: A = *((char *)( seed & 0x1fff ))
問題点・・・
一様な乱数では無い。
プログラムを変えると、乱数も変わってしまう。
・ギャラガでは
Rレジスタを乱数として使用した
・・・ Z80特有の メモリのリフレッシュを行うためのカウンタ
→ メモリの情報保持のために、CPUの動作関係なしに常に動いているレジスタ
不規則な数字が格納されている
実装例: A = *((char*)( 0x100 + Vcnt + R ))
A = A + R
問題点・・・
Z80以外のCPUでは使えない。
再現性がない
乱数の値が一様である保証が無い
--------------------------------------------------------------------
●線形合同法
最も有名な乱数
乱数 = ( seed * A + B ) mod 2^n
A = (4の倍数+1) 、 B = 奇数 の時、最大周期 2^n
C言語の rand()関数に使われているため 最もポピュラー
・ナムコのゲームでは 伝統的に
seed * 5 + 1
が使われていた。
利点・・・
掛け算がないCPUでも 容易に実装可能
周期が最大 256 (8ビットなら)
具体例としては
ポールポジション seed * 5 + 1 + Vカウンタ
ディグダグ seed * 5 + 1
パック&パル seed * 13 + 1
・欠点
分布を見てみると、縞になりやすい
下位ビットほど周期性がない
→ 下位1ビット目 周期2
下位2ビット目 周期4
下位3ビット目 周期8
下位4ビット目 周期16
--------------------------------------------------------------------
●線形帰還シフトレジスタ
電子回路でよく用いられる方法
シフト演算器の特定ビットをXORして戻すだけ
1回の操作(クロック)で 1ビットの乱数を得られる
どのビットを抽出して、XORを取るか? で周期が決まる。
(8ビットだと 最大周期255)
例)
4ビット目 と 7ビット目を抽出して乱数を作ります。
レジスタが 01011000 という状態のとき 4ビット目と7ビット目のXORは 1
1という乱数を得た後
レジスタを一つシフトし (01011000 → 10110000)
下位1ビットに 得られた乱数 1 を入れる (10110001)
→ レジスタは 10110001 になる (この時のXORは 0)
→ レジスタは 01100010 になる (この時のXORは 0)
→ レジスタは 11000100 になる (この時のXORは 1)
→ レジスタは 10001001 になる (この時のXORは 1)
→ ・・・
こうして、得られたビットを 乱数として扱う。
利点・・・
出力ビットのばらつきがとても良い
・実際の使用例
ギャラクシアン、ギャラガで 背景の星の配置に 使用していた。
他には、
ボスコニアン 6ビット目と14ビット目のXOR の反転 + Rレジスタ
マッピー 0ビット目と7ビット目のXOR の反転
ドラゴンバスター 8ビット目と15ビット目のXOR の反転
・ドルアーガの塔 での使用例
ステージのフロアを 乱数で生成している。
(種はフロア毎に固定なので 毎回同じ形のステージになる)
4ビット目と7ビット目のXOR の反転 したものを使用
より踏み込んだ内容は、こちらにまとめました。
http://sekigames.gg-blog.com/Entry/291/
・欠点
実装したコードを見ても、パッと見 何をしている処理か良く分からない。
1回の操作では、1ビットしか取得できない
(8ビットの乱数を得るためには 8回操作をしないといけない)
変化しない形が存在する
→ 00000000 は何度操作しても 00000000 になる。
(初期化に注意)
--------------------------------------------------------------------
●80年代 中頃
・線形合同法 + 線形帰還シフトレジスタ
両方の結果を足して、それを乱数とする手法
線形合同法 と 線形帰還シフトレジスタ のいいとこどり
→ 線形合同法の 下位ビットの周期性が改善
線形帰還シフトレジスタの上位ビットの履歴も隠蔽
→ 乱数の周期が拡大
(周期 55552)
●80年代末
・テーブル参照主義 の復権
この頃 メモリが増大し(MByteの時代) CPUはまだまだ遅かった
Sin、Cos、Atan、Sqrt なんでもテーブルに入れてしまえ
な時代だった
●90年代
・C言語の襲来
→ 乱数アルゴリズムを自作せず
rand() をそのまま利用するコードが主流に
→ 線形合同法の問題が再び・・・
--------------------------------------------------------------------
●現在の乱数
・GFSR (Generalized Feedback Sift Register)
線形帰還シフトレジスタ を32個並べれば 1回の操作で 32ビット乱数が取れる
シフトレジスタ → ワード列の配列
欠点
周期は 1ビット分の線形帰還シフトレジスタ と同じ
適切な種で初期化しないと、適切な乱数が生まれてくれない
これが進化して
Twisted GFSR
→ メルセンヌ・ツイスター法 (超長大周期 2の19937乗 - 1)
--------------------------------------------------------------------
●まとめ
乱数は その性質を見極めて、正しく使いましょう
癖のある乱数も 使い方次第でゲームに味わいを生むことができる
→ ドルアーガの塔が とても良い例
過去の乱数アルゴリズム の反省点や改良から
今の メルセンヌ・ツイスター法 が生まれたという事もあり 過去の技術史を読む解くのも大変意義があります。
ついったー
http://twitter.com/seki_seki_seki
連絡先は
sekisekiseki(あっと)gmail.com