2009-11-15
State-Based Scripting in Uncharted 2: Among Thieves
via GDC 2009 Uncharted 2 State-Based Scripting - yakiimo02の日記: State-Based Scripting in Uncharted 2: Among Thieves
うぉぉぉ!Uncharted 2のゲームで使われてるスクリプトの話。
- PLT Schemeがベース
- defun とか出てくるけど?
- シンボルじゃなく、文字列を使ってるぽい
- FiniteStateMachine (Hierarchicalじゃない?)
- stateごとにon イベント
- go でステート切り替え
- trackがスレッドで、イベント内で使える
- VM
- waitは継続
Naughty dogはJak & DaxterでのLisp風言語(Game Object Assembly Lisp)でLispに懲りて、Lispは捨てたのかと思ってたぜ。
中身は案外普通。
- Adventures in Data Compilation - Uncharted: Drake's Fortune, Dan Liebgold, GDC/2008
- スライドこれだけ?
2009-11-09
Shibuya.lisp テクニカルトーク#4に参加しました
Shibuya.lisp テクニカルトーク #4 に参加しました。
Lispは歴史が長いだけあって年配の方々の話、近山隆先生によるCommonLisp以前の話や、竹内郁雄先生によるLisp誕生までのマッカーシーの紆余曲折の話とかが聞けて、とても楽しかった。万能カレンダーの話とかUSO-800とか楽しそうに話すんでとてもよかった。
Lispがノイマン型(プログラムとデータを区別しない)ってのは考えたことなかったなぁ。でノイマンはヒルベルトに師事してて、ゲーデルの不完全性定理に衝撃を受けたのが影響してるはず、てのがなるほど!と思った。また「LISP はラムダ算法の計算モデルを紙の上で表現するための記法として考案された」うんぬんは聞いたことがあったんだけど、ゲーデルと関係あるとは知らなかったなぁ。
LTで発表させていただきました。去年はあわあわして5分内に終わらなかったので、今回はそういうことがないようにと思って高橋メソッドにしてみた。上がって周りが見えなくなるところは変わらず、ただまあ高橋メソッドでガンガン進めていったら一応時間内に、1分も時間が余った。でもアドリブきかないんで、そのまま終了。
内容に関しては、ABAさんとshinhさんに頼りっきり、お二人に感謝します。会場に来ていたshinhさんとお話が出来て幸せ。
もうちょっとハキハキと、抑揚をつけて話せるようになりたいなぁ。司会をされてるharupiyoさんやhigeponさんはさすが場慣れしてる、と思ってきいてみると、higeponさんでも緊張するし、練習よりペースが早くなってしまったと言っていた。全然そうは見えないな!
最後に、毎回会場を貸してくださっているECナビさんありがとうございます。ふつう会社は営利目的だけど、こういう形でも人々を支えてくれるのは素晴らしいですね。kinukawaさんは毎回宴会の幹事という大変な役を自らやっていてすごいと思う。koguroさんはすでに動画をニコニコ動画とYouTubeに上げてくださっている。仕事速っ!
2009-11-07
Shibuya.lisp テクニカルトーク#4 LT「弾幕記述言語BulletSMLのご紹介」
Shibuya.lisp テクニカルトーク#4のLightning Talksで、「弾幕記述言語BulletSMLのご紹介」という題でお話させていただきました。スライドの内容を張っておきます。中途半端ですが、ソースはgithubに上げてあります。会の感想はまた後ほど。
弾幕記述言語
BulletSML
の ご紹介
mokehehe
----
自己紹介
----
http://cadr.g.hatena.ne.jp/mokehehe/
----
弾幕記述言語?
----
2Dシューティングゲームの
敵の弾の出現パターンや動作
を記述する言語
----
http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/
----
言語形式
----
----
CODE:
"http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/bulletml.dtd">
<bulletml xmlns="http://www.asahi-net.or.jp/~cs8k-cyu/bulletml">
<action label="top">
<repeat>
<times>100</times>
<action>
<fire>
<direction type="sequence">23</direction>
<bullet/>
</fire>
<wait>1</wait>
</action>
</repeat>
</action>
</bulletml>
----
CODE:
action:
動作の定義
repeat:
指定した回数だけactionを繰り返す
fire:
弾を発射
wait:
指定時間だけ待つ
などなど...
----
解釈と
実行
----
アプレット
----
XMLをパース
木の形式で保持
トラバースで実行
----
C++用ライブラリ
libbulletml / shinh
http://shinh.skr.jp/libbulletml/
----
Lispで
----
XML?
----
S式!
----
BulletSML
=
BulletMLのS式版
----
CODE:
(action :label top
(repeat
(times 100)
(action
(fire
(direction :type sequence
23)
(bullet))
(wait 1)))))
アトリビュートはPLISTで表現
----
解釈と
実行
----
マクロで
プログラムに
直接変換
----
CODE:
(action :label top
...))
↓
----
CODE:
(letrec ((%action-top
(lambda (self . $args)
...)))
%action-top)
・弾幕挙動の関数を返す
----
CODE:
(repeat
(times 3)
(action ...))
↓
----
CODE:
(dotimes (i 3)
(action ...))
----
CODE:
(action
...)
↓
----
CODE:
...)
----
CODE:
(wait 1)
↓
----
CODE:
(yield 1)
・継続を使用
----
動作
デモ
----
+
----
弾幕データは
白い弾幕くん / shinh
のものを使用
----
利点
----
普通の式も
使える
----
ただし、
あまり自由にやりすぎると
BulletMLとの
互換性がなくなるという罠
----
難点
----
継続/弾
は無謀
----
http://github.com/mokehehe/bulletsml
----
enjoy
danmaku
life!
2009-10-29
Shibuya.lisp TT#4 ライトニングトークの発表内容決定!
Shibuya.lisp » Blog Archive » Shibuya.lisp TT#4 繝ゥ繧、繝医ル繝ウ繧ー繝医?シ繧ッ縺ョ逋コ陦ィ蜀?螳ケ豎コ螳?!
ま、タイトルだけで全てわかってしまう、出落ちということでみなさん生暖かい目でよろしくお願いします。
2009-10-09
Land of Lisp
"Land of Lisp"ってどうなんでしょうかね
ゲームを題材に、ってのは惹かれる
【入門】Common Lisp その6【質問よろず】
- こんな本が出るとは知らなかった…おもしろそうだな!
- 著者のConrad Barski氏がlisperati.comの人?
- ウェブにあるマンガ風だったらちょっと読みづらいかも…
- Common Lisp本#1 g000001さんのリストマニアが出てきたw ペロ…これは純度が高くて致死量を超えている…
2009-10-01
Arcでゴルフ
> Arc
調査ありがとうございます。今度入れときます。
2009-09-29 - 兼雑記
Arcがゴルフ場に入る!ということで先に遊んでおく。自分の腕が不足してるのか案外短くならず、軒並みScheme(Gauche)に負けてるのが残念。つかSchemeでどうやってるんだろう…。
echo:23
(whilet c(readc)(pr c))
google:32
(pr'g(string(n-of(read)'o))'gle)
fizzbuzz:79
(= % multiple)(for i 1 100(prn(if(% i 15)'FizzBuzz(% i 3)'Fizz(% i 5)'Buzz i)))
((afn(a b i)(when(< i 46)(self b(+(prn a)b)(+ i 1))))1 1 0)
ポートから1行読み込むreadlineの仕様が酷くて行頭に#\newlineがきても空行にしてくれないので、行単位になんかするもの、reverse linesをやろうとしてガッカリした。
Arcはウェブサーバに必要な機能に特化してそうなんで、いいとこだけとってゴルフという観点でLispを再設計したら面白いかもしれない。
2009-09-13
g000001さんを褒め称える
Shibuya.lisp TT#4に向けて - Shibuya.lisp | Google グループ
これまでのTT/LTerの募り方 - Shibuya.lisp | Google グループ
上のスレとかを見ると、id:g000001さんのすごさを感じずにはいられない。段取り力、アイデア出し、行動力、みんなへの意見の求め方・まとめ方など、全てにおいて抜きん出ている。
それもLispはいわば趣味の、1円にもならないことに関してこれだけ精力的に行動するモチベーションはどこから沸いてきているのかと、感嘆する。こういう人がコミュニティを作り支えているのだなぁと頼もしく思う。
2009-09-05
「コンピュータ将棋プログラムをLISPで書く」はミスリーディング
コンピュータ将棋プログラムをLISPで書く - やねうらお−よっちゃんイカを食べながら、やねうら王を開発中。
Yaneu Labs --- コンピュータ将棋プログラムをLISPで書く
Lisp愛好家狂喜!と思ったらタイトルで完全に釣り。「Lispで将棋の思考ルーチンを書く」という話じゃなくて「スクリプトでソース生成」という話じゃんか。ソースを生成するための言語としてLispを選ぶ理由も、自前で実装する理由もよくわからなかった。文字列処理に強い言語は他にもたくさんあるし、2日で実装した処理系よりよっぽど信頼度高いよ。
S式の評価はeval連発方式か…。そんなんでLispはメタプログラミングを多用するから遅いとか言ってちゃだめだよ!
「//%」で始まる行はLispソース、そうじゃない行は文字列扱い、という仕様かな?
Windowsのシェルが弱いのが全て悪いんや…だから既存のツールを組み合わせて使うという考えにならないんや…
yaneurao> 2日で実装した処理系よりよっぽど信頼度高いよ。
信頼度の問題ではないです。自分にとって使いやすいかどうかが大切です。トータルでの生産性は信頼度のみで決まるものではないからです。
> S式の評価はeval連発方式か…。そんなんでLispはメタプログラミングを多用するから遅いとか言ってちゃだめだよ!
これは、速度が要求されないところで用いるものだから、簡易実装としてそうしているだけです。
> コンパイラという話でもなくて、単なる文字列置換ですよ!
これで言語としてfixされているわけではないので(自分で作っているのだからどんどん手を入れることは出来る)、単なる文字置換以上のものだと思いますし、もう少し手を入れればDSLっぽいことだって出来ます。
だから、はてブでの評価は、別にみんな騙されているわけでも過大評価でもないと思いますよ。
mokeheheいやー大多数は「やねさんがLispですごいことをしてる」と勘違いしてると思いますよ。
> 最強クラスのコンピュータ将棋ソフトであるBonanzaとGPS将棋に関してはソースが公開されている。そのどちらも高速化には数々のテクニックが使われている。
> それなのに、LISPなんかに本当にトッププログラムと互角にやり合えるだけのポテンシャルがあるのか?
こう書いてあれば誰でもLispで思考ルーチンを作ってるのかと思いますよね。今回の話ははっきりいって将棋とは関係ないし、Lispも選択肢の1つでしかないですよね。
DSLというよりかは、テンプレートエンジンだと思いました。
yaneurao> こう書いてあれば誰でもLispで思考ルーチンを作ってるのかと思いますよね。
最後まで読めば小学生だってそれは違うことぐらいわかるでしょう。いくらなんでも「大多数」が最後まで読んでいないと言うのには無理があるのでは。
> 今回の話ははっきりいって将棋とは関係ないし
コンピュータ将棋は、高速化が命であり、そのためにコードを極度にunrollしなければならないので、そのためにコード生成を補助してくれるスクリプト or DSLが必要でそのスクリプトとしてLISPが最適だというのが私の主張なので、「コンピュータ将棋」と「LISP」とは大いに関係があります。
> Lispも選択肢の1つでしかないですよね。
parserが書きやすくて、かつ、関数がfirst class objectであり、かつ、数時間で実装できる言語を私はLISP以外に思いつかないので、私にとってはLISPが唯一無二の選択肢で、「選択肢のひとつ」ではないです。
この条件を満たすメジャーな(誰でも名前を聞いて内容を想像できるような)言語が他にあるなら、是非教えてもらいたいです。
> DSLというよりかは、テンプレートエンジンだと思いました。
それは使い方次第でしょう…。実際、コンピュータ将棋プログラムのコードを生成するのにLISP側で手に負えないことは、C#側で専用の関数をいくつも書いてます。ですので、私は単なる文字置換ソフトのつもりも、テンプレートエンジンのつもりもありません。
komagata僕もマクロを作った将棋向けDSLかと思ってたので、「文字列をevalするなら何でも良いじゃん」と思ってしまいました。wktkした分余計に。
mokeheheご自分で
> yaneurao 2009/09/06 19:00
> ええ、ええ。しかしこれがCMならJAROに通報されますかね…。
と書いてるじゃないですか。
yaneurao↑*2
> 「文字列をevalするなら何でも良いじゃん」
意味がわからない。「ソースコード中のコメント行をevalする」話なのか、「evalできる言語ならなんでもいい」という話なのかどちら?また、なぜそれなら「何でも良い」と言えるの?
↑*1
記事のタイトルが釣りっぽいからと言って、みんなが本文の内容が理解できなくなって、中身が理解できずにはてブするわけではない。
あなたの主張は、みんなが内容を理解せずに騙されてはてブしているということだけど、それはタイトルが釣りっぽいこととは何ら関係がない。


http://www.amazon.co.jp/gp/richpub/listmania/fullview/R1R0QJ8UWIY6