SlideShare a Scribd company logo
1 of 27
Download to read offline
10月のLT
🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣
自己紹介
2
• @S_Shimotori
• 最近学習意欲と勤労意欲がない
• 研究室変えて大丈夫かなあ
• 某某某某某で得た金は自転車に溶かした
• 身長150cmが乗れる自転車のモデルは1シリーズ
しかなかったのでかなしかったです。
• 3月インターンどこ
今日の話
3
特にオチのない
ゲームの小ネタ
アジェンだ
4
• マップの自動生成(けっこう有名)
• FFのデータ参照バグ(知る人ぞ知る)
• 厨二病な名前のライブラリ(ふーん)
• 自然に見える疑似乱数列の生成法(へー)
• ゲームを動かす数学・物理(あっそう)
ゲームの小ネタ[1]
5
マップの自動生成
昔のゲームの特徴
6
• 入れられるデータ量には限度がある
• スーファミで50MB弱……らしい
• 今は10GBとかがある……らしい
• データ圧縮のために苦心していた時代がある
• エスコン3はディスク枚数を減らすためデータの配
置を最適化したら読み込み時間がほぼ0になった
• 何を言っているのかわからない
データ削減例:マップ自動生成
7
• ドルアーガの塔
• 舞台は60階建ての塔、60階分のマップデータを入れ
るのはしんどい
• マップを自動生成すればいいんじゃね!?
• 結果マップデータは60バイト未満らしい
マップ自動生成の原理
8
• 基本は柱(17本*8本くらい)だけのマップ
• 線形帰還シフトレジスタにより乱数を発生、柱から壁を生
やす
• 線形帰還シフトレジスタは発生する乱数の値が初期シー
ドで決まり、0または1を返す
• ドルアーガの塔では「前の乱数値+新しい乱数値」で
00∼11の4種の乱数を発生させていた
• ある柱に対して00だったらその柱から上に壁を伸ば
す、とか
Before
9
出典:http://yasu9780.hatenablog.com/entry/
2015/06/17/222234
After
10
出典:http://d.hatena.ne.jp/yaneurao/20130125
うまくマップ自動生成する
11
• 線形帰還シフトレジスタは特定のシードを与えると同
じ値を返し続けるという性質がある
• シードが255だと1を生成し続ける
• 「11だったら柱から左に壁を伸ばす」と設定
最上階マップはこちら
12
• 最上階のみシード値を255とする
ゲームの小ネタ[2]
13
データ参照バグ
データ参照バグ
14
• ゲームにはいろいろなデータが保存されている
• 古いゲームはガバガバなので、特定の動作を取ると
すぐ目的外のデータを読んで意味不な動作をする
• ポケモンの「セレクトBBバグ」も違うところを

読み書きしたばっかりにバグっている
• 省略
FF4の64階層バグ(1/3)
15
• FF4(SFC版)
• 世界を旅したり途中建物に入ったりする
• ワールドマップでは階層が「0」
• 建物に入る(「行き」)と階層+1
• 建物から出る(「帰る」)は階層-1
• 「行き」の階段に入ると+1、「帰り」なら-1
• 「帰る」ときは「行き」の履歴を見ることで正しくマッ
プ遷移をして元のマップに戻れる
FF4の64階層バグ(2/3)
16
• とある建物では「行き」の階段ばかりが配置されてい
て階層の値をインクリメントしまくることができる
• 階層63の次は階層0になる(ダメ)
• 63から0にしたあと階層を-1すると階層がマイナス
になる
• 階層がマイナスになる移動をすると、マップ遷移の
処理のとき違うところを参照するので、結果バグる
• 詳細→sm18279717
FF4の64階層バグ(3/3)
17
• バグ発生時に誤って読んでしまう領域の例
• 飛空 とチョコボ(主人公御一行の乗り物)を

駐車している座標
• 各種コンフィグの値(枠の色RGBとか)
• 各キャラの技の並び
• 所持金
• 事前にこれらを特定の値に設定しておくことで、いい
感じのバグを引き起こすことができる
64階層バグの有効活用(1/2)
18
• 特定のマップにワープ
• 前述の項目をいい感じに設定してマップ遷移を起こ
すことで、好きなところに行ける
• 特定の技を習得
• 敵の技すら覚える
• 敵の技には、「あらゆる耐性を無視して(主人公に
とっての)敵を全滅させる」技がある
64階層バグの有効活用(2/2)
19
• 「凶悪な技をひっさげて」「ラスボスのいるマップへ
ワープ」することにより、素早くゲームクリアする
• TASのルールでは実機で再現できるものならバグを
使ってもいいのでこのバグを利用する
• バグを自重しないTASさんがFF4を1:42:03で
クリア【超更新】Part 1(sm22838224)
ゲームの小ネタ[3]
20
厨二病な名前のライブラリ
厨二病
21
• qiita.com/shibukawa/items/95130b2dec50301c66fe
• http://mithril.js.org/
• http://elixir-lang.org/
• http://ethna.jp/doc/
• http://www.goblinphysics.com/
• https://odinge.codeplex.com/
• http://www.firerift.com/support/docs/titan/
• https://code.google.com/p/bahamut-engine/
• https://github.com/jdangerx/Cockatrice
ゲームの小ネタ[4]
22
(プレイヤーにとって)
自然に見える擬似乱数列
自然な擬似乱数列
23
• 数学的に自然な擬似乱数列とプレイヤーが見て自然な
擬似乱数列は違う……という論文

「標準的なゲームプレイヤにとって自然に見える疑似
乱数列の生成法」
• 情報処理学会にゲームプログラミングワークショッ
プがあるということを初めて知りました!
• まあワークショップだし具体的な成果は
自然な擬似乱数列
24
• 数学的に自然な擬似乱数列
• 大きな目で見ればばらつきはないが、部分を見ると
「コインの表裏が連続する」「サイコロの出目が連
続する」時もある
• 実際のプレイヤー
• コイントス等の結果は連続しないという思い込み
• ある事象が起きる確率の見積もり間違い
• などなど
ゲームの小ネタ[5]
25
ゲームを動かす数学・物理
ゲームを動かす数学・物理
26
• 「ゲームを動かす数学・物理」という本がちょっと前
に話題になっていた
• 立ち読みした
• 高校数学だった
• そっと本棚に戻した
• 報告は以上です
まとめ
27
• 昔の人は苦労してたんだなあ。すごいなあ。
• 今でも昔のゲームのバグが見つかっているらしい。

見つけてる人はきっと変態だ。
• 某FEの攻撃命中確率は表示よりも極端だぞ。マジで。

More Related Content

Viewers also liked (9)

Vizitaţi şcoala noastră
Vizitaţi şcoala noastrăVizitaţi şcoala noastră
Vizitaţi şcoala noastră
 
طلعت حرب باشا
طلعت حرب باشاطلعت حرب باشا
طلعت حرب باشا
 
Pavasaris
PavasarisPavasaris
Pavasaris
 
swipe file
swipe fileswipe file
swipe file
 
Making strategy a reality jwilliamson
Making strategy a reality  jwilliamsonMaking strategy a reality  jwilliamson
Making strategy a reality jwilliamson
 
Group3-ps number 9
Group3-ps number 9Group3-ps number 9
Group3-ps number 9
 
Dealing with store the objectstore
Dealing with store the objectstoreDealing with store the objectstore
Dealing with store the objectstore
 
Using jersey exception mapper
Using jersey exception mapperUsing jersey exception mapper
Using jersey exception mapper
 
Calling flow from another application
Calling flow from another applicationCalling flow from another application
Calling flow from another application
 

特にオチのないゲームの小ネタ