13/03/10 15:10:32.28 .net
LuaやSquirrelやAngelScriptなどアプリケーションへの組み込み用途で
使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
URLリンク(wikiwiki.jp)
その他の参考URLは>2から
■前スレ
【Lua】組み込み系言語総合 その5【Squirrel】
スレリンク(tech板)
■過去スレ
その4 スレリンク(tech板)
その3 スレリンク(tech板)
その2 スレリンク(tech板)
その1 スレリンク(tech板)
プログラミング言語 Lua
その3 スレリンク(tech板)
2:デフォルトの名無しさん
13/03/10 15:12:03.71 .net
□Lua
URLリンク(www.lua.org) (本家)
URLリンク(lua-users.org) (lua-users)
URLリンク(luaforge.net) (LuaForge)
URLリンク(sugarpot.sakura.ne.jp)(5.1マニュアル和訳)
Lua言語の紹介
URLリンク(staff.aist.go.jp)
入門Luaプログラミング
URLリンク(www.amazon.co.jp)
□Lua as an Effect File Format for OpenGL
URLリンク(prideout.net)
□Squirrel
URLリンク(www.squirrel-lang.org) (本家)
URLリンク(sourceforge.net)
URLリンク(sourceforge.net) (SqPlus)
URLリンク(sourceforge.net) (Squirrel Shell)
URLリンク(wikiwiki.jp)(wiki内2.1マニュアル和訳)
□AngelScript
URLリンク(www.angelcode.com)
□Xtal(ゲーム向け。スタックを意識しなくていい?)
URLリンク(d.hatena.ne.jp)
URLリンク(code.google.com)
URLリンク(blog.livedoor.jp)
□elastiC
URLリンク(www.elasticworld.org)
3:デフォルトの名無しさん
13/03/10 15:15:41.30 .net
■関連してるかもしれないスレ
Io Language
スレリンク(tech板)
2 part forth
スレリンク(tech板)
●●●●TCL/TKなら俺に聞け 2●●●●
スレリンク(tech板)
ECMAScript デス 4
スレリンク(tech板)
各種ライブラリ紹介スレ2(ゲ制作)
スレリンク(gamedev板)
Eclipse統合M34【Java/C++/Ruby/Python/Scala】
スレリンク(tech板)
「コンパイラ・スクリプトエンジン」相談室15
スレリンク(tech板)
Garbage Collection (GC)について語るスレ(DAT落ち)
スレリンク(tech板)
4:デフォルトの名無しさん
13/03/10 15:18:19.66 .net
誰も立てないから同じテンプレで立ててみた
いつ立てるの?今でしょ!
5:デフォルトの名無しさん
13/03/11 00:44:45.26 .net
乙
6:デフォルトの名無しさん
13/03/11 01:15:20.59 .net
乙
次スレは>>980あたりが立てればいいか?
7:デフォルトの名無しさん
13/03/11 09:56:54.76 .net
AngelScript|Д`)<新スレ乙
8:デフォルトの名無しさん
13/03/11 18:39:51.97 .net
LuaJIT 2.0.1
Update 2013-03-08: Please apply Hotfix#1 to the 2.0.1 download.
9:デフォルトの名無しさん
13/03/13 21:01:52.29 .net
\ l´⌒\⌒\ \\ \
\ ヽ ) ) \\ \\
( \ \∩___∩ \\
\ \ ⌒⌒| ノ ヽ \\
\ \ / ● ● ト、\ \\\
\ Y | ( _●_) ミ\ \\\
\ / 彡、_ |∪| ノ \ \\\
(____)―ヽノ' ヽ  ̄ ̄ ヽ\\
\, j l l .l }
Lua! l (_ノノノノ
10:デフォルトの名無しさん
13/03/19 08:31:39.53 .net
Programming in Lua 第3版おめ
11:デフォルトの名無しさん
13/03/19 20:43:32.77 .net
いつ?
12:デフォルトの名無しさん
13/03/19 20:54:19.77 .net
なぜluaを使うのですか?
13:デフォルトの名無しさん
13/03/19 21:21:41.59 .net
>>12
小さくて密度の高い事は美しいことだから。
14:デフォルトの名無しさん
13/03/19 23:18:07.76 .net
スタックダンプが快感
15:デフォルトの名無しさん
13/03/20 05:44:19.66 .net
テーブルの威力がすごすぎるから
16:デフォルトの名無しさん
13/03/20 07:12:07.39 .net
めたたbぇ
17:デフォルトの名無しさん
13/03/20 09:54:07.19 .net
luaを使うことを強いられているんだ!
18:デフォルトの名無しさん
13/03/20 14:50:07.03 .net
luaにはC#のLINQやPythonのリスト内包表記は無いんですか?
19:デフォルトの名無しさん
13/03/22 15:29:50.19 .net
metatableってクソじゃないか?
コードを難解にするだけじゃん
20:デフォルトの名無しさん
13/03/22 17:52:56.00 .net
確かにリスト内包表記は可読性を著しく損なう糞だな。
21:デフォルトの名無しさん
13/03/22 19:55:31.63 .net
>>20
あれほど簡潔なものはないとおもうが?
22:デフォルトの名無しさん
13/03/22 20:16:28.69 .net
論点をずらすなよ
23:デフォルトの名無しさん
13/03/22 21:49:15.12 .net
metatableはクソって話だったな
24:デフォルトの名無しさん
13/03/22 23:37:53.28 .net
めたたbぇprpr
25:デフォルトの名無しさん
13/03/23 00:31:02.17 .net
たとえば DATETIME というクラスを定義したときに
演算子をメタテーブルで与える。
これはC++のoperatorとかRubyの def 演算子()
に該当するなんのへんてつもないただの定義でないのん?
26:デフォルトの名無しさん
13/03/23 00:32:36.87 .net
そもそもoperator再定義自体が下品で破廉恥な行為だ
27:デフォルトの名無しさん
13/03/23 00:53:51.29 .net
せやな
28:デフォルトの名無しさん
13/03/23 09:28:32.81 .net
確かに
29:デフォルトの名無しさん
13/03/23 17:16:41.74 .net
リスト内包表記はいいものだ
30:デフォルトの名無しさん
13/03/23 17:50:15.62 .net
あっそ
31:デフォルトの名無しさん
13/03/23 19:47:34.80 .net
Luaにはなぜないのだろうね
32:デフォルトの名無しさん
13/03/23 21:38:19.50 .net
クロージャとコルーチンで同じことできるし…
33:デフォルトの名無しさん
13/03/24 09:41:18.14 .net
内包表記のためにそんなもん使うのは大袈裟だろ
34:デフォルトの名無しさん
13/03/24 16:32:17.84 .net
内包表記っぽいものを作るのにコルーチンは使わんだろ
generatorじゃないんだから
35:デフォルトの名無しさん
13/03/24 16:35:10.57 .net
pythonはジェネレーターだよ
36:デフォルトの名無しさん
13/03/24 16:48:46.24 .net
いいね
37:デフォルトの名無しさん
13/03/24 17:42:15.18 .net
>>35
ん?
pythonの内包表記は即座にリストとして展開されるよ
[ x ** 2 for x in range(10) if x%2 == 0 ] みたいに角かっこで書くやつね
( x ** 2 for x in range(10) if x%2 == 0 ) みたいに丸かっこで書くとgenerator式になる
38:デフォルトの名無しさん
13/03/24 17:46:46.83 .net
Luaは関数の末尾呼び出しを最適化してくれるのがいいね
39:デフォルトの名無しさん
13/03/24 18:13:24.43 .net
そんなんどこでもやってますよ・・?
40:デフォルトの名無しさん
13/03/24 18:34:00.43 .net
JVM!JVM!
41:デフォルトの名無しさん
13/03/24 19:27:34.14 .net
Luaはとにかく組み込みやすいのがいい。
逆に言えばLuaだけで何でもできると思ってる奴はアフォ
42:デフォルトの名無しさん
13/03/24 20:05:41.56 .net
メタテーブルとcoroutineもすき
43:デフォルトの名無しさん
13/03/24 20:12:10.70 .net
>39
関数型言語では当たり前だけど、pythonとかメジャーなスクリプトではスタックがあふれるだろ?
44:デフォルトの名無しさん
13/03/24 20:15:13.57 .net
単なる末尾呼び出しの最適化は最適化の中でも初歩の初歩だしやってないわけないと思う・・・んだけどなあ
45:デフォルトの名無しさん
13/03/24 20:31:15.66 .net
Luaで真似事しようとするとこんな感じ?
function LC(f)
local t = {}
for x in coroutine.wrap(f) do
table.insert(t, x)
end
return t
end
-- rangeの実装は省略
local t = LC(function () for x in range(10) do coroutine.yield(x ^ 2) end end)
46:デフォルトの名無しさん
13/03/24 20:32:18.04 .net
最適化の理論とかはよく知らんけど
pythonの関数呼び出しは単純にC言語のコールスタックに依存してるので、どんどん積み上がっていくよ
47:デフォルトの名無しさん
13/03/24 20:33:56.31 .net
>>45
これはキモイな
やはりpythonには勝てないか
48:デフォルトの名無しさん
13/03/24 20:43:35.17 .net
Pythonはlambdaとdefが異なるのがガン。
Luaは区別無し。名前の無いfunctionがlambda
49:デフォルトの名無しさん
13/03/24 20:57:01.13 .net
>45
やるとしたらそんな感じだろうね
でも、内包表記って言うよりはmapみたいな雰囲気になっちゃうよね
内包表記って数学の集合みたいに宣言的に記述できるってところがメリットのひとつだからなぁ
数学だとこんな感じ? S = { x^2 | x ∈ N, x < 10, x mod 2 = 0 }
やっぱり言語としてサポートしないとつらそう
50:デフォルトの名無しさん
13/03/24 21:05:14.50 .net
>>48
すごく同意
pythonのlambdaは中途半端だね
Luaは文法がコンパクトですっきりしていて、すごく便利って感じではないが
でもコルーチンをサポートしてたり、末尾呼び出し最適化してたりで
ちょうどいい塩梅
51:デフォルトの名無しさん
13/03/24 21:14:17.85 .net
しかし内包表記がないと一行が数倍にふくれあがるし見た目も悪い
52:デフォルトの名無しさん
13/03/24 21:27:46.25 .net
単なるシンタックスシュガーだからパーサを弄ればできそうだけど
lispのリーダーマクロっぽいのほしいな
53:デフォルトの名無しさん
13/03/24 21:31:07.63 .net
有志でlua#つくろうず
54:デフォルトの名無しさん
13/03/24 21:33:14.06 .net
mrubyでいいじゃん
もっと欲張るならPythonも比較的組み込みやすい
55:デフォルトの名無しさん
13/03/24 21:59:26.75 .net
mrubyの実行速度ってどんなもん?
なおrubyも内包表記はない模様
56:デフォルトの名無しさん
13/03/24 22:59:45.74 .net
Luaとの比較だと、スクリプト自体の実行速度はちょっと遅めだけど誤差レベル
実行時のメモリのフットプリントが数倍くらい多い
APIがスタックベースじゃないため拡張は幾分書きやすいけど
そのせいでネイティブとの行き来が増えると実行コストは大きくなる傾向がある
JITはまだ実用レベルじゃない
みたいな感じ(俺調べ)
Luaに取って代わるかは知らんけど、二番煎じ処理系(Sq*とかxta*とか)は駆逐できそうな感じではある
57:デフォルトの名無しさん
13/03/25 00:06:08.81 .net
mrubyの問題は .cのソースコードの行数でLuaの1.5倍ある。
1万6千行に対し二万四千行。
んで、LuaのソースコードはCでもC++でも
どちらでもコンパイル可能なので
Luaの関数の内部からC++のライブラリが使える
(ただしthrowが外側に貫通してはいけないけどね)
yaccとかも不要。
なんというか、最近のbisonとかは内部でm4使ってるとか
いろいろとめんどくさい仕様に改悪されてるから助かるw
58:デフォルトの名無しさん
13/03/25 03:30:49.12 .net
Luaも確かv3.0くらいまではyacc使ってたんだけどね
今のパーサはシンプルな手書き再帰下降でLL(2)だから
内包表記の対応は難しいんじゃないかな
59:デフォルトの名無しさん
13/03/25 07:51:15.04 .net
内包表記みたいなのの解析は、luaの場合パーサがLLかLRかよりも
構文木を介さず直接コード生成してるところが逆にネックになりそう
60:デフォルトの名無しさん
13/03/25 17:54:00.04 .net
Luaのソースコード見てみたら他の言語に比べて超短いな
全部でこれだけかよってびっくりしたわ
これなら個人で解析出来るな、今日から読んでみるわ
61:デフォルトの名無しさん
13/03/25 21:59:44.09 .net
パーサいじるんなら
ついでに「:」か「.」を別の記号に変えたくなるけどね
62:デフォルトの名無しさん
13/03/26 01:13:30.00 .net
metaluaみたいにluaのパーサー上書きする方法はあるみたいだぞ。
luajitでは動かないみたいだが。
63:デフォルトの名無しさん
13/03/27 21:52:23.47 .net
パーサー弄ってわざわざ「->」演算子を追加した事があるな俺
64:デフォルトの名無しさん
13/03/28 08:20:38.05 .net
記念していつもの
lua-5.2.2
URLリンク(www1.axfc.net)
65:デフォルトの名無しさん
13/03/28 08:36:16.34 .net
おめ
66:デフォルトの名無しさん
13/04/02 21:46:57.64 .net
AngelScript|Д`)<AngelScript2.26.2記念カキコ
67:デフォルトの名無しさん
13/04/02 22:04:23.95 .net
おめ
68:デフォルトの名無しさん
13/04/02 22:09:38.32 .net
>>64
依存関係がMSVCRT.DLLってことはMingW?
69:デフォルトの名無しさん
13/04/02 22:16:19.20 .net
いいえ
70:デフォルトの名無しさん
13/04/02 22:26:09.11 .net
んん VC6?
71:デフォルトの名無しさん
13/04/02 22:27:32.44 .net
いいえ
72:デフォルトの名無しさん
13/04/02 23:20:37.81 .net
てかコンパイル環境とか書いてないと
DLLって公開する意味あるの?
不整合とか気にするジャン。
73:デフォルトの名無しさん
13/04/02 23:24:16.56 .net
いいえ
74:デフォルトの名無しさん
13/04/03 00:02:33.52 .net
そうすっと たとえばEXEのランタイムと
DLL側のランタイムでデータフォーマットや
整列条件違ったら困ったことにならないの?
75:デフォルトの名無しさん
13/04/03 00:15:02.91 .net
そういえばSquirrelだけ記念カキコがない
76:デフォルトの名無しさん
13/04/03 00:31:33.85 .net
はい
77:デフォルトの名無しさん
13/04/03 01:20:18.06 .net
Luaの場合はヘッダに構造体定義してるのがlua_Debugくらいだし
DLLの境界問題出にくいけどな
ちゅーかどこぞの馬の骨が捨て置いたバイナリに喰いつく暇があったら
自分のプロジェクトにLuaのソースコード突っ込んだ方が建設的かと
78:デフォルトの名無しさん
13/04/03 01:22:27.16 .net
はい
79:デフォルトの名無しさん
13/04/03 20:17:59.94 .net
Luaはなぜ早いのですか?
中の妖精さんと高額契約したのですか?
80:デフォルトの名無しさん
13/04/03 21:11:29.32 .net
/|
|/__
ヽ| l l│<ハーイ
┷┷┷
81:デフォルトの名無しさん
13/04/03 21:37:47.94 .net
コアにVMを置いて中間コードを実行していること
(この方式は他も追従し追いつかれつつある)
VMがレジスタマシンであること
設計の合理性
(整数演算の切捨てなど、ボトルネックの分析が良かった)
JITなど速い方式の実装も行われている
かな
82:デフォルトの名無しさん
13/04/03 21:55:44.63 .net
整数演算がボトルネックというのが分かりません
doubleのほうが百万倍遅いじゃないですか気持ち的に
83:デフォルトの名無しさん
13/04/03 22:05:29.72 .net
うん、だからその理屈だと整数演算を切り捨ててはいけないんだけど
Luaはそれを切り捨てたのよ。
それでもベンチマーク成績は高かった。
つまり、演算以外の部分が問題だったわけね。
84:デフォルトの名無しさん
13/04/03 22:11:56.98 .net
doubleそれほど遅くないよ。割り算を除けばせいぜい2倍位じゃないの?
intとdoubleの変換が遅かったりして。
85:デフォルトの名無しさん
13/04/03 22:14:30.36 .net
doubleの処理は、今時のそこそこのデスクトップマシンと、
そこいらへんにたくさんあるARMとで、天と地ほどの差があるなw
86:デフォルトの名無しさん
13/04/03 22:16:23.31 .net
整数演算がないと困るのはビット演算
が5.2でライブラリが追加されたからそれもほぼ解消
87:デフォルトの名無しさん
13/04/03 22:19:25.09 .net
>>83
浮動小数演算がボトルネックにはならなかったって話と、整数演算が
ボトルネックだったって話は関係ないじゃん。
88:デフォルトの名無しさん
13/04/03 22:28:42.34 .net
その辺のことはこのあたりかな
URLリンク(lua-users.org)
89:デフォルトの名無しさん
13/04/03 22:31:35.75 .net
そもそも誰も「整数演算がボトルネック」なんて話してないし
90:デフォルトの名無しさん
13/04/03 22:52:19.88 .net
整数演算がボトルネックといっているのではなく、
浮動小数点演算の遅さは実は問題ではなかったという判断
だから整数演算いらんというデザイン
91:デフォルトの名無しさん
13/04/03 22:53:39.83 .net
速くなればなるほど問題が表面化するというわけだな
92:デフォルトの名無しさん
13/04/03 23:01:32.81 .net
JIT版の実装が良くなればたぶんね
93:デフォルトの名無しさん
13/04/03 23:14:14.82 .net
>>89
つまり、整数演算切り捨てたこととLuaが速いことは関係ないってことだろ。
>>81はボトルネックと言っているが。
94:デフォルトの名無しさん
13/04/03 23:25:40.76 .net
>>81はLuaが速い一因として設計の合理性を挙げていて
整数演算がボトルネックとは言ってないし
>>83や>>90のフォローもそれを補強していると思うんだが
読解力がないのならしょうがない
95:デフォルトの名無しさん
13/04/03 23:31:28.29 .net
言語仕様そのものが速さ目的で設計されてるってのもあるんでないか
ローカル変数をわざわざ指定しなきゃならんとか
書く側からすれば面倒な仕様だけど多分これだとGCがやりやすいんだろうなとか
ソース見たわけじゃないから分からんけどね
96:デフォルトの名無しさん
13/04/04 20:48:23.65 .net
AngelScript|Д`)<みんなでtemplate触ろうぜ
97:デフォルトの名無しさん
13/04/04 20:55:01.09 .net
Squirrel |Д`)<Squirrel 3.0.4記念カキコ
98:デフォルトの名無しさん
13/04/05 20:50:30.10 .net
Squirrel更新か!?
と思ったのに!
99:デフォルトの名無しさん
13/04/10 01:40:40.27 .net
AngelScriptにDelegate対応が来てた
100:デフォルトの名無しさん
13/04/12 20:39:39.69 .net
今度のはfuncdefとかの関数ポインタが無くなってデリゲートに置き換わるのか。
101:デフォルトの名無しさん
13/04/13 06:03:24.53 .net
どんどん実務向きじゃなくなってくな
102:デフォルトの名無しさん
13/04/13 10:14:35.22 .net
出たよ実務厨
103:デフォルトの名無しさん
13/04/13 12:50:15.63 .net
AngelScript、C++もどきからC#もどきになっていっちゃうのかな
104:デフォルトの名無しさん
13/04/13 16:49:05.32 .net
同じC#もどきならTypeScript使いたい
JSとの互換性をある程度制限したサブセットならluaのVMで動かせるんじゃないか
105:デフォルトの名無しさん
13/04/13 21:56:15.10 .net
V8じゃダメなのかな。
106:デフォルトの名無しさん
13/04/13 23:11:15.34 .net
V8ってサイズでかいし不安定だし組み込むのめんどくさい
107:デフォルトの名無しさん
13/04/13 23:24:25.01 .net
エンジンだけに
108:デフォルトの名無しさん
13/04/14 08:39:34.90 .net
URLリンク(www.infoq.com)
EclipseのM2M開発環境
> EclipseはArduinoとRasberry Piデバイスの開発のチュートリアルを提供している。
> これには組み込みLuaランタイム(Mihini)とLuaの開発環境(Koneki)のセットアップ方法も含まれている。
Luaがセンサーネットワークの世界に旅立っていった。
109:デフォルトの名無しさん
13/04/14 08:43:24.10 .net
栗鼠月天使
110:デフォルトの名無しさん
13/04/14 10:19:21.31 .net
ぅあってお仕事ではどんな場面でちゅかうんですか?
111:デフォルトの名無しさん
13/04/14 10:23:03.29 .net
ぅあきねんぱぴこ
112:デフォルトの名無しさん
13/04/15 14:31:12.59 .net
AngelScriptのデリゲートって
オブジェクトのインスタンスとメソッドから関数ポインタを作る機能のようだ
普通の関数もクラスメソッドも関数ポインタに代入できる
3.0では値型のオブジェクトは使えなくなって
参照型のオブジェクトのみになるらしい
そうなるといっそうC#やJavaっぽくなる
113:デフォルトの名無しさん
13/04/17 19:02:58.71 .net
地道にブログの記事を参考にさせていただいていますが(感謝しております)
大々的にLuaBindのことを日本語で語ってるような場所ってないですかね?
114:デフォルトの名無しさん
13/04/21 06:56:41.22 .net
(´\r-、 ┼ + /`/`) +
┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
/ /
(_ ⌒丶..
| /ヽ }.
し ))
ソ トントン
115:デフォルトの名無しさん
13/04/24 18:36:10.04 .net
なんかみっけたので
MarmaladeがRADツールMarmalade Quickを正式リリース 2013-02-11 14:14
URLリンク(www.madewithmarmalade.com)
またMarmalade Quickは“ZeroBrane Studio” IDEと統合されており、Luaスクリプトの容易なオーサリング、デバッグが可能です。
116:デフォルトの名無しさん
13/04/30 22:06:32.31 .net
squirrel で Direct3D の Vertex みたいな、
状況に応じて構造体の中身が変わる物を
squirrel から C++ 側に送りたい時って
何かいい方法はあるのでしょうか。
ディフューズ色が DWORD なのが問題なのですよね…。
他は殆どが FLOAT なのに…。
117:デフォルトの名無しさん
13/05/01 02:36:38.25 .net
JSの世界はブラウザの中で戦争していてるせいか、FFI使えないからGCやJIT切ってVM上にアセンブラ載せてみたりなんか凄いね。
URLリンク(www.publickey1.jp)
118:デフォルトの名無しさん
13/05/01 02:41:19.59 .net
まあブラウザ上でLuaというかHTMLにLuaを埋め込むとかよくある中二病の扉ががが
119:デフォルトの名無しさん
13/05/01 15:59:59.18 .net
>>116
普通にフラグ判定して値を代入しなおすだけではないの?
float も dword も4byte で領域的には同じだからあとは
解釈次第だと思うんだけど何にはまってるんだろう
120:デフォルトの名無しさん
13/05/01 16:51:43.21 .net
>>116
バインダはSqrat?
121:デフォルトの名無しさん
13/05/01 22:59:00.95 .net
>>119 >>120 すみません、確かにそうですね。 メモリ確保して memcpy でコピーする事にしました。
それと追加で質問なのですが、 C++側でSqrat::Classで登録したクラスを、 SquirrelからC++関数の呼び出しの引数に指定した際に、 C++関数内からクラスの実体を得る方法はあるのでしょうか?
RootTable(vm).GetSlotを使えばメンバ関数・変数にはアクセス出来るのですが、 クラスのポインタを取得して普通のC++のクラスのように扱えたらなと思ったので。
122:デフォルトの名無しさん
13/05/02 23:32:28.39 .net
自己解決しました、何度も失礼しました
123:デフォルトの名無しさん
13/05/03 02:38:40.28 .net
5.2.2きた
124:デフォルトの名無しさん
13/05/03 14:30:49.45 .net
>>121
AngelScript|Д`)ノ<きたわよ
そういうのはAngelScriptでやると簡単。
125:デフォルトの名無しさん
13/05/03 14:40:55.38 .net
(´\r-、 ┼ + /`/`) +
┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
/ /
(_ ⌒丶..
| /ヽ }.
し ))
ソ トントン
126:デフォルトの名無しさん
13/05/03 18:36:39.38 .net
来ると思ってました
127:デフォルトの名無しさん
13/05/08 22:07:08.55 .net
luaでバインダを使わずにC++クラスのメンバ変数をバインドする
方法を解説してる所ってありませんか?
メンバ関数経由でset getするのしか見つからず…
128:デフォルトの名無しさん
13/05/08 23:56:32.38 .net
バインダのソース読めばいいのでは
ラッピング関数作ってると思うけど
129:デフォルトの名無しさん
13/05/09 00:59:43.08 .net
__index/__newindexメタメソッドを関数にして、その中でメンバ変数にバインドしたいキーが指定されたら
対応するC++のメンバ変数をそのまま返す/設定するってのできるっちゃできるけどね
メンバ関数でやるより逆にコストかかる仕組みになるし多値返しできないしで
ぶっちゃけ言語サポート無しに無理するもんじゃねーなという結論に達した
130:デフォルトの名無しさん
13/05/09 05:31:19.08 .net
?
131:デフォルトの名無しさん
13/05/09 05:46:34.65 .net
ぅあ?
132:デフォルトの名無しさん
13/05/09 18:39:34.03 .net
>>127
AngelScript|Д`)ノ<きたわよ
133:デフォルトの名無しさん
13/05/09 18:43:49.69 .net
luaは永遠に不滅です!
134:デフォルトの名無しさん
13/05/09 22:03:41.56 .net
>>128-129
なるほど、やはりその方法しかないのですね。
教えて頂きありがとうございました。
135:デフォルトの名無しさん
13/05/10 21:30:02.44 .net
AngelScript|Д`)<AngelScript2.26.3記念カキコ
136:デフォルトの名無しさん
13/05/10 22:11:42.38 .net
(´\r-、 ┼ + /`/`) +
┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
/ /
(_ ⌒丶..
| /ヽ }.
し ))
ソ トントン
137:デフォルトの名無しさん
13/05/16 18:07:30.53 .net
Squirrelでsq_setnativeclosurenameでバインドしたクラスの
メンバ変数にアクセスする場合の話なのですが、
obj.menba は __get や __set でアクセスすればいいのですが、
obj.menba.var という風なメンバにアクセスしようとしたら、
[the index 'var' does not exist] というエラーが出てしまいました。
こういった使い方をしたい場合はどうやって登録すればいいのでしょうか。
138:デフォルトの名無しさん
13/05/17 00:17:43.29 .net
>>137
AngelScript|Д`)ノ<きたわよ
AngelScriptはその辺得意だよ。
139:デフォルトの名無しさん
13/06/08 18:40:11.38 .net
Game Monkey Script ってどうなんでしょう
URLリンク(www.gmscript.com)
Q-Games の新作 PixelJunk, Inc. で使われているそうな…
URLリンク(pixeljunk.jp)
140:デフォルトの名無しさん
13/06/08 19:25:57.51 .net
なんか懐かしい名前だ
141:デフォルトの名無しさん
13/06/08 19:42:34.92 .net
GameMonkeyの名前自体は1スレ目からたまに挙がってるけど、踏み込んだ話題は…
142:デフォルトの名無しさん
13/06/08 20:01:20.72 .net
>>139
どう「いい」やつが欲しいのかによる・・・んじゃね
143:デフォルトの名無しさん
13/06/08 20:49:05.20 .net
CEDEC2010でGameMonkeyScript(とXtal)を使ってゲーム作った人らが講演してる。
その資料がここにある
URLリンク(cedil.cesa.or.jp)
無料だが登録が必要
日本語だとこれ関係しか見当たらぬ…
144:デフォルトの名無しさん
13/06/09 15:47:26.83 .net
GameMonkeyってバンナムが採用してなかったっけ
145:139
13/06/10 11:39:34.51 .net
>>140-143 ありがとうございます。
>>144
>>143 がバンナムの人の講演記事で
業務用ゲーム機で利用した例が紹介されてました。
146:デフォルトの名無しさん
13/06/11 22:38:34.29 .net
以前スレで出てたスクリプト言語の比較してたサイトで、GameMonkeyは結構いい性能叩き出してた気がする。
147:デフォルトの名無しさん
13/07/01 NY:AN:NY.AN .net
decoda便利すぎ
148:デフォルトの名無しさん
13/07/01 NY:AN:NY.AN .net
>>147
AngelScriptにもそういうのが欲しい…
デバッグ用の情報取ってきたりするのは簡単なんだけど
149:デフォルトの名無しさん
13/07/02 NY:AN:NY.AN .net
asPEEKは?
URLリンク(www.angelcode.com)
asPEEK - Remote debugger
saejox has implemented a remote debugger for AngelScript projects. By integrating asPEEK into your application you will be able to use an ordinary web browser to remote debug your scripts with a nice graphical interface.
Download asPEEK from Bitbucket
Note: Code uses boost and websocket
150:149
13/07/02 NY:AN:NY.AN .net
asにブラウザで動くリモートデバッガがあるのは知っていたけど使ったことなかった
151:デフォルトの名無しさん
13/07/05 NY:AN:NY.AN .net
luabind使ってC側の型とか関数とか登録しまくってたら、
lua_Stateの使用メモリがKB単位でモリモリ増えてって
消費メモリ量が無視できない量になりつつある�
152:セけどもそういうもんなの?
153:デフォルトの名無しさん
13/07/06 NY:AN:NY.AN .net
とりあえずソースぐらいは出しましょう。
他の言語も含め生でゴリゴリと各種バインダの差異など含めベンチとりましょう。
簡単なものでいいですよ。
お題が楽しければ暇な人も参戦し実のある内容になるでしょう。
154:デフォルトの名無しさん
13/07/06 NY:AN:NY.AN .net
luaのバインダって結構あるんだね。
知らないだけでtolua++やluabindより良いバインダが存在しているような気がする。
155:デフォルトの名無しさん
13/07/11 NY:AN:NY.AN .net
>>149
ダウンロードしたけど、Demoのやつの動かし方が分からなかった…
156:デフォルトの名無しさん
13/07/12 NY:AN:NY.AN .net
昔、Pascalのbegin/endを、C言語で#defineしようとした人がいたらしい
今度は、mallocとかfreeとかをスクリプト言語にバインドする人が出てくる
強力なバインダは良いバインダではない
弱い方が良い
157:デフォルトの名無しさん
13/07/12 NY:AN:NY.AN .net
何を言っているのかよくわからんが、
#define begin { は、以下のような奴だな。
URLリンク(minnie.tuhs.org)
URLリンク(www.pro.or.jp)
なんか全然違う話だと俺は思うのだが
158:デフォルトの名無しさん
13/07/12 NY:AN:NY.AN .net
よくわからん側の主導で推進してるっぽいのが不安だ
159:デフォルトの名無しさん
13/07/12 NY:AN:NY.AN .net
>>155
>昔、Pascalのbegin/endを、C言語で#defineしようとした人がいたらしい
マクロの使い方としてK&Rにも書かれてる方法であり、取り立てて驚くような話ではない。
160:デフォルトの名無しさん
13/07/12 NY:AN:NY.AN .net
条件付きにて同意する
161:デフォルトの名無しさん
13/07/12 NY:AN:NY.AN .net
そもそもスクリプトでmallocやfreeを直接使うような事ってある?
162:デフォルトの名無しさん
13/07/13 NY:AN:NY.AN .net
Cの関数を忠実に再現するツールを使うと、スクリプトでmallocやfreeを使う事になる
忠実にしたくない場合はツールに丸投げできないと考えるのが自然
163:デフォルトの名無しさん
13/07/15 NY:AN:NY.AN .net
そういや、CriScriptって、今どうなってるんだろう?
164:デフォルトの名無しさん
13/07/15 NY:AN:NY.AN .net
>>162
CriScript作ってた人がgoogleかどっかに入ってプロジェクト終了、じゃなかったっけ
165:デフォルトの名無しさん
13/07/16 NY:AN:NY.AN .net
そこそこ良いものだったような気もするが、残念な話だな
166:デフォルトの名無しさん
13/07/26 NY:AN:NY.AN .net
Luaのコルーチンのように、スクリプト内で呼び出すと関数が終わるかSuspend(Luaだとyield)するまで実行して戻ってくるAngelScript用のコルーチンを作ってみたら、
自分のメソッドを呼び出すコルーチンをインスタンスとして持たせたら、循環参照が起こって解放されずにメモリリークに。
class A
{
coroutine c;
void coFunc()
{
…
Suspend();
…
}
void Init()
{
…
c.SetFunction(cFUNC(this.coFunc));
…
}
void Update()
{
c.Execute();
}
};
こんな感じでやると、cが循環参照になっちゃった。
167:デフォルトの名無しさん
13/07/27 NY:AN:NY.AN .net
あるある
その手の処理には弱参照が必要
168:デフォルトの名無しさん
13/07/27 NY:AN:NY.AN .net
AngelScript2.27.0のWorkInProgressに、「weak references」とかあるから、次のバージョンだと解決できそう。
169:デフォルトの名無しさん
13/07/29 NY:AN:NY.AN .net
AngelScript 2.27.0 is out - AngelCode - GameDev.net
URLリンク(www.gamedev.net)
・デリゲートを作ったりデリゲートの情報を取得できる
・関数の引数や戻り値がconst参照か調べられる
・GCが把握しているオブジェクトを列挙してパフォーマンス改善に役立てられる
・弱参照 スクリプトのクラスでもアプリケーションのクラスでも使える
170:デフォルトの名無しさん
13/07/29 NY:AN:NY.AN .net
Angelscriptは参照カウントとGCを併用しているから
一応GCフラグのあるクラスであれば、弱参照を使っていなくて循環参照になっても、最終的にGCで解放されるはずなんだが
弱参照を使っていればもっと早いタイミングで解放されるので使うといいと思ふ
171:デフォルトの名無しさん
13/07/31 NY:AN:NY.AN .net
AngelScript2.27.0でやってみたが、循環参照の問題解決できなかった。
弱参照やら
>・デリゲートを作ったりデリゲートの情報を取得できる
の機能を利用してみたがダメだった。
C++側でasIScriptFunctionを保持するやり方を間違えているのかも知れない。
172:デフォルトの名無しさん
13/08/06 NY:AN:NY.AN .net
AS、さらに調べてみたところ、
「スクリプト内のクラスAにC++側で定義したクラスBをメンバ変数として持たせて、Bのインスタンスに
this.~でAのメンバ関数のdelegateを渡して保持する」
と循環参照が発生して解放されない、という状態になってるっぽい。
「AにBとスクリプト内のクラスCをメンバ変数として持たせて、Cのインスタンスのdelegateを渡して保持する」
場合は大丈夫っぽいんだが、さてどうしたものか。
173:デフォルトの名無しさん
13/08/07 NY:AN:NY.AN .net
いや、C++のクラスを弱参照かGCフラグに対応させろよ?
174:デフォルトの名無しさん
13/08/07 NY:AN:NY.AN .net
弱参照って何?
175:デフォルトの名無しさん
13/08/07 NY:AN:NY.AN .net
ぬるぽするかもしれない可能性が存在することが保障されてるぽ
176:デフォルトの名無しさん
13/08/07 NY:AN:NY.AN .net
>>172
一応、asBEHAVE_GET_WEAKREF_FLAGを使って弱参照にしてみたり、
asOBJ_GCつけてメソッド入れてやってみたんだけど上手く行かないんだ。
asIScriptFunctionが内部で持ってるデリゲート用のオブジェクトが上手く解放できないみたい。
177:デフォルトの名無しさん
13/08/08 NY:AN:NY.AN .net
コードも無いのに分からない
循環参照にはならない筈なのに解放漏れがあるならそれは
何処かで参照カウント減らして解放するのを忘れているだけなんじゃないか
としか言えない
178:デフォルトの名無しさん
13/08/08 NY:AN:NY.AN .net
\\
\\\
\ ∧_∧
( ´・ω・)
G と) ガッ >>174
ヽ⌒)、 \人∧__∧
 ̄ (_) >`д´)')
∨つ /
179:デフォルトの名無しさん
13/08/18 NY:AN:NY.AN .net
AngelScript 2.27.1 is here (so soon? yes)
URLリンク(www.gamedev.net)
バグフィックス
メモリフットプリントの減少
void expressionで関数の出力引数を省略できる
デフォルト引数を匿名に出来る
180:デフォルトの名無しさん
13/08/29 NY:AN:NY.AN .net
素人だけど勉強がてらにAngel Scriptの解説見てたらめっちゃコンパイル言語でワロタ
181:デフォルトの名無しさん
13/08/30 NY:AN:NY.AN .net
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
182:デフォルトの名無しさん
13/08/31 NY:AN:NY.AN .net
enum大好きな俺はAngelScriptも大好き。
183:デフォルトの名無しさん
13/09/01 10:45:33.66 .net
コード補完とか開発環境の恩恵受けられる組み込みスクリプトってある?
184:デフォルトの名無しさん
13/09/01 12:16:25.91 .net
開発環境の恩恵と言えば最近はJavaScript (V8)じゃないの?
ほとんどが動的型付けだから
コード補完の性能はどれも似たようなもの
むしろ使い慣れた開発環境・エディタが対応しているかの方が重要だと思う
185:デフォルトの名無しさん
13/09/01 13:52:27.44 .net
luaにはIDEがあるけど、他でも探せばあるんじゃないか
186:デフォルトの名無しさん
13/09/01 15:20:57.01 .net
>>182
VS&C#にC#だな。
187:デフォルトの名無しさん
13/09/01 15:56:48.03 .net
30億のデバイスで走るJavaを差し置いてC#が組み込み言語とか!
みたいなツッコミでOK?
188:デフォルトの名無しさん
13/09/01 16:01:13.71 .net
30億のデバイスでデバッグできるね(ニッコリ)
って感じでさらに脱線させればOK?
189:デフォルトの名無しさん
13/09/01 18:35:17.50 .net
なにがライトワンスランエニ�
190:zェアだよ 絵空事ばかり 世迷い言に人々を巻き込みやがって 太平妖術だよ
191:デフォルトの名無しさん
13/09/01 18:36:18.64 .net
(´\r-、 ┼ + /`/`) +
┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
/ /
(_ ⌒丶..
| /ヽ }.
し ))
ソ トントン
192:デフォルトの名無しさん
13/09/01 20:38:37.26 .net
JavaScriptは言語仕様が黒魔術のようだ
193:デフォルトの名無しさん
13/09/02 00:35:21.08 .net
AngelScriptはほぼC++かC#なんで、C++やC#用の補完とか使えた気がする。
194:デフォルトの名無しさん
13/09/02 22:27:39.45 .net
SWIGってLuaでも使えたのか知らなかった
ラッパーとインタフェースの自動生成が捗る?
195:デフォルトの名無しさん
13/09/02 22:41:22.04 .net
そもそもSWIGで捗った記憶がない
最近のは知らんが
196:デフォルトの名無しさん
13/09/04 16:57:01.01 .net
SWIGだめなん?
197:デフォルトの名無しさん
13/09/04 17:20:42.93 .net
パターンファイル作ってクソ重いコンパイルでコケて修正して…
を繰り返してるうちに嫌になるな
生成されたシンボル名が1000文字突破してるの見て
めまいがしたのもいい思い出だ
198:デフォルトの名無しさん
13/09/04 18:12:40.97 .net
この手のタイプは元ソース次第だね
luabindより楽なケースもあればバインダ使わず生で書いたほうが楽なケースもある
その上で、SWIGを選択するような状況でダメだというなら
他の選択肢はtoluaぐらいしかない
で、SWIGとtoluaを比べると
冗長なのはデメリットだが依存せずピュアコードを吐くのはメリットなので好みの問題として
多言語対応でつぶしが効くという1点においてSWIGの勝ちかなと思うよ
199:デフォルトの名無しさん
13/09/10 19:15:01.41 .net
userdataってなんだ・・・
200:デフォルトの名無しさん
13/09/10 19:36:31.38 .net
好きなもの入れちゃっていいんだよ?
201:デフォルトの名無しさん
13/09/11 08:36:58.96 .net
ズブ…
202:デフォルトの名無しさん
13/09/11 16:59:49.05 .net
アーッ!
203:デフォルトの名無しさん
13/09/11 22:45:42.73 .net
UserDataは、スクリプトで操作したいオブジェクトのポインタとか入れるのが一般的かね。
204:デフォルトの名無しさん
13/09/11 22:51:01.71 .net
Cでやったほうが速いとか外部ライブラリ用の構造体へのポインタを突っ込んだり
205:デフォルトの名無しさん
13/09/11 23:26:48.79 .net
ゲームの殆どをAngelScriptで組み
時間のかかる処理だけをネイティブコードに
の方が開発しやすいかもしれない
206:デフォルトの名無しさん
13/09/11 23:30:18.16 .net
何と比較してだ
207:デフォルトの名無しさん
13/09/14 03:21:57.79 .net
横からだが、C++オンリーで組むのと比べて、って事じゃね
208:デフォルトの名無しさん
13/09/15 07:46:57.16 .net
スクワールはもういらんこなの?
209:デフォルトの名無しさん
13/09/15 08:12:11.62 .net
∩_
〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ Lua!!
彡、 |∪| /
/ __ ヽノ /
(___)
210:デフォルトの名無しさん
13/09/15 12:52:09.81 .net
Angelscript見てるとdllで良いんじゃないかと思えてくる
てかそういう用途としてdll使うのってもう流行ってないんかな?(昔のエロゲとか)
呼び出し元を変更したらコンパイルし直しになるのはスクリプトだって同じだし、バインダも必要ない。
もっぱらLGPLの回避法としてしか見なくなった
211:デフォルトの名無しさん
13/09/15 13:28:21.98 .net
ライターにC++で直接書けとでも?
212:デフォルトの名無しさん
13/09/15 14:55:12.13 .net
ライターにAngelScriptで直接書けとでも?
213:デフォルトの名無しさん
13/09/15 16:54:49.61 .net
何でAngelScriptなの
214:デフォルトの名無しさん
13/09/15 17:45:32.19 .net
目指してる、未来がちがうからでしょ
215:デフォルトの名無しさん
13/09/15 21:06:15.98 .net
C++ではコルーチンがなくてゲームに使うには困るかと思ったが
fiberやlongjmpを使ったら出来ない事はないな
だがライターにVisuaStudio入れてもらうとか出来ないだろ?
ライターには簡単にプログラムをインストール・実行できる環境が必要だ
プログラマーにも
・コンパイルから実行までが速い(実行前にネイティブコード生成とか最適化をしないから)
・リフレクションが使える
等のメリットはある
ラムダ式やデリゲートはC++11で使えることは使えるな
216:デフォルトの名無しさん
13/09/15 22:55:54.12 .net
スクリプトの場合、yieldやSuspendで途中で一時停止できるのはでかいと思うよ。
217:デフォルトの名無しさん
13/09/15 23:44:33.85 .net
コルーチンなんて
boost他、標準ライブラリオンリーのイディオムも腐るほどあるし
メリットが感じられない
218:デフォルトの名無しさん
13/09/16 12:08:37.51 .net
それよりGCが自動なところ
219:デフォルトの名無しさん
13/09/16 16:39:52.89 .net
Javaは一つのコードがあらゆる環境で動作する素晴らしい言語だった。
しかし、マイクロソフトが行ったCOM拡張によって互換性が失われ、パソコン用アプリが
スマホでは動かないといったトラブルが起こるようになった。
220:デフォルトの名無しさん
13/09/16 16:50:37.98 .net
C#とかの.NET系環境でのスクリプトっていうと
やっぱりIronPython/IronRubyとかになるんでしょうか?
できればLuaを使いたいのですが、LuaDowNetは随分長い間止まってますし
と質問しようと思って検索したら、AluminiumLua(2008年更新)ってのがあったので
これ試してから出直します。
すみませんでした。
URLリンク(github.com)
221:デフォルトの名無しさん
13/09/16 16:52:25.96 .net
2008年は誤りで、今現在もアクティブなプロジェクトでした
たびたびすみません
222:デフォルトの名無しさん
13/09/18 12:01:03.07 .net
C++ではヘッダーとソースそれぞれに関数宣言・定義を書かないといけないが
スクリプトだと一つのファイルに書ける
C++で何でもヘッダーに関数定義を書いたらコンパイル時間が大変な事になる
223:デフォルトの名無しさん
13/09/18 12:09:19.32 .net
そこかよ
224:デフォルトの名無しさん
13/09/18 12:16:26.38 .net
宣言と定義で分けたりせず
一つのファイルに書けてありがたいだろ?
225:デフォルトの名無しさん
13/09/18 12:57:45.99 .net
そのくらいなら JavaでもC#でもDでもできる
226:デフォルトの名無しさん
13/09/18 13:45:40.90 .net
全部C++で書くのでなければ別に良いんだけどな
Javaで書くとAndroidには移植しやすいかもしれないがiPhoneにはそのまま持っていけない
MonoはAndroid、iPhoneでも動くけど無料の開発環境なし
PCでも、未だにXPを使っている様な人はVMを入れていなかったり
その点スクリプト言語のVMは小さいから同梱しやすい
Dとか知らん!
227:デフォルトの名無しさん
13/09/18 14:47:00.98 .net
>>218
コミュニティの規模が小さいのでJScript一択
保守まで考えるとhackはproductとして採用できない
228:デフォルトの名無しさん
13/09/18 22:41:41.90 .net
>>225
Luaの方がスクリプトを書きなれているので、できればそっちを使いたいと思っていました。
JScriptの利用も少し考えましたが、利用方法がいまいちパッとしなかったので見送りました。
保守性は、個人/小規模利用なので大して気にしていません。
229:デフォルトの名無しさん
13/09/19 06:18:34.30 .net
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
∩_
〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ Lua!!
彡、 |∪| /
/ __ ヽノ /
(___)
230:デフォルトの名無しさん
13/09/24 01:30:13.90 .net
mrubyはここでOK?
231:デフォルトの名無しさん
13/09/24 19:59:45.11 .net
組み込みだからOKだけど、話題にできる人はいないかも
232:デフォルトの名無しさん
13/09/24 21:03:42.63 .net
mrubyの組み込みは、アプリケーション組み込みじゃなくて、家電とかへの組み込みのほうだと思うんだ。
アプリケーション組み込みなら、mrubyでなくとも本家のrubyでもできるし
233:デフォルトの名無しさん
13/09/24 23:53:45.13 .net
べつに、rubyもmrubyもここでやればいいじゃん。
234:デフォルトの名無しさん
13/09/25 00:47:43.99 .net
Rubyはテキストの変換に使う事が多いな。
CSVファイルからスクリプトに変換したりとか。
235:デフォルトの名無しさん
13/09/27 11:18:33.53 .net
luabindを使おうとしたら、lua_openで未解決の外部シンボルがでたー。ちゃんとライブラリ設定してるのに。。。
236:デフォルトの名無しさん
13/09/27 12:04:12.82 .net
バインダーなど使わないでスタック方式に慣れるのが結局は一番だよ
237:デフォルトの名無しさん
13/09/27 18:18:42.84 .net
やっとコンパイル出来た。今から初めて組み込むのでどの処理をluaにもっていこうか全然決まってない。みんなどういう感じで組み込んでるの?
238:デフォルトの名無しさん
13/09/27 18:33:15.82 .net
アプリ完成後にもカスタマイズしたりする部分
239:デフォルトの名無しさん
13/09/27 23:10:20.40 .net
ゲームとしてのエンジン部分を全部Lua側から呼び出せるようにして、
あとはLuaでアルゴリズム組むだけでゲームを作れるようにしておくとすごい快適
個人的には各種パラメータを、数値をイジるだけじゃなく
定義を修正しまくっても余裕なのが最高
240:デフォルトの名無しさん
13/09/28 09:12:16.18 .net
逆に言うとそれだけなんだからLuaで十分なんだよな。
Luaだと辛いなーな部分はCで書きゃいいだけ。
241:デフォルトの名無しさん
13/09/28 11:19:10.07 .net
マインクラフトでJRubyやってたんだけどluajなんてのもあったんだね
Cのバインディングに挫折しそうになってた頃に出会ってたら危なかった
242:デフォルトの名無しさん
13/09/28 15:57:45.92 .net
俺はそこまでやるなら端からもっと高機能な言語使えばいいと思うけどなあ
243:デフォルトの名無しさん
13/09/29 00:13:43.34 .net
AngelScript|Д`)ノ<きたわよ
C++側のクラスとかもそのままスクリプトで使えるよ。
244:デフォルトの名無しさん
13/09/29 02:20:08.22 .net
(´\r-、 ┼ + /`/`) +
┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
/ /
(_ ⌒丶..
| /ヽ }.
し ))
ソ トントン
245:デフォルトの名無しさん
13/10/10 19:31:49.27 .net
>>635
URLリンク(www.lua.org)
246:デフォルトの名無しさん
13/10/10 19:33:12.35 .net
gobak
247:デフォルトの名無しさん
13/10/13 01:54:16.74 .net
Luaでちょっと質問なんだけど
Luaの無名関数をC関数で受け取って、
それを、C側から任意のタイミングでコールしたいんだけど、どうしたらいいの?
lua_type()の戻り値を見ると、LUA_TFUNCTION型みたいなんだけど、これはどう扱ったらいいんだろう…
248:デフォルトの名無しさん
13/10/13 06:06:13.41 .net
自己解決
luaL_refとluaL_unrefで参照数を操作して、生かして、
生かしておいたのを lua_rawgetiでスタックにプッシュして
lua_call系でいいんだね
249:デフォルトの名無しさん
13/10/25 14:27:11.51 .net
Luaスクリプトについての質問なんですが、
Luaにエラー関数を設定する場合は
lua_pcallにてエラー関数のスタックを設定しますが、
これをコルーチンで行う場合、
lua_resumeを呼びだすのですがエラー関数の設定が見当たらないです。
どこで設定すると呼びだされるようになるのでしょうか…。
お願いします!
250:デフォルトの名無しさん
13/10/25 15:45:29.07 .net
保護モード事態が特殊な動作なわけだから resume を pcall すれば?
251:デフォルトの名無しさん
13/11/02 00:38:50.34 .net
クラスの中にlua_stateを作っておいて、値の更新とかをlua側でしたいんですけど、
luaに自分自身を渡して、lua側で値を更新させて、自分自身に反映させるのは
どうすればいいでしょう。lua_pushlightuserdataじゃインスタンスは別になる?
252:デフォルトの名無しさん
13/11/02 01:04:30.61 .net
まずC++側とC側に分けて
値の更新をC側でできるようにしてから
C側の内部でLuaを使う
253:デフォルトの名無しさん
13/11/02 01:06:57.46 .net
C++でsetter作って、luaでそれを呼ぶってことですか?
すみません。C++とCで分けるという所はどういう感じで分けるのでしょうか。
254:デフォルトの名無しさん
13/11/02 10:59:08.34 .net
luaで何かアクションをするとC++側の値が書き換わるようにしたい?
userdataにメタテーブルを仕込んでやればできる。他のやり方も
あると思うけど。
例えばuserdataにthisや関数へのポインタを入れておいてメタテーブルに
cfunctionを登録しておく。登録したcfuntcionではuserdataから
thisとかを取り出して何かすればいい。
255:デフォルトの名無しさん
13/11/02 12:43:26.03 .net
>>252
やりたいことは、リコンパイルしなくても値を変更できるようにしたいです。
そこで、luaにオブジェクトの初期処理や更新処理を持っていって、描画はC++で
しようと思ってます。
教えていただいた内容を調べながら試してみます。
256:デフォルトの名無しさん
13/11/02 12:55:58.52 .net
それだったら、C++からLuaの変数を読み出すだけでもいいんじゃない?
C++でLuaチャンク実行→Luaチャンク実行終了→変数の値を読み出して利用する。
LuaのプログラムからCallbackさせながら、C++プログラムと協調動作させる
必要があれば、252のようにする必要があるけど。
257:デフォルトの名無しさん
13/11/02 13:10:44.93 .net
>>254
初期処理でクラスの各項目値は、luaのメソッドを呼び出してその戻り値を受けるので
出来たのですが、更新処理となるとロジックがあって、単純に戻り値を受け取るだけだと
中々難しいなーと思って、ロジックもluaに移そうと思っていました。
そういうのはやっぱり、lua⇒C++の関数⇒luaみたいな感じになるんですね。
自分のイメージとしてはC++でインスタンスをluaに渡す⇒luaで引数のインスタンスに対して
色々な処理を行い値を変更する⇒luaメソッド終了⇒C++に処理が戻るみたいな感じです。
258:デフォルトの名無しさん
13/11/03 10:39:57.23 .net
スクリプト内の変数の値をC/C++側から操作したいって事なのかな。
259:デフォルトの名無しさん
13/11/03 11:14:19.88 .net
C++のポインタはキャストするとどうなるか調べるのが面倒臭いって事でしょ
Cならlua_pushlightuserdataでいいよ
260:デフォルトの名無しさん
13/11/03 11:24:38.17 .net
制御権の受け渡しをどうするかってことでしょ。
Lua側の記述とLuaチャンクの実行の仕方を工夫するしかないんじゃないか?
261:デフォルトの名無しさん
13/11/03 12:00:06.70 .net
C++でnewで確保した領域のポインタを
lua_pushlightuserdata等でlua内の変数に渡しているときに、
このlua内の変数のスコープがはずれたりしたときに、
このポインタをdeleteしたいのだけどできますか?
262:デフォルトの名無しさん
13/11/03 14:45:33.09 .net
基本的に無理じゃね。メタメソッド持てないし
可能ならuserdataで確保したメモリそのものに割り当てるか
スマポとかで包んでからuserdataに突っ込む感じになるかと
263:デフォルトの名無しさん
13/11/03 18:17:24.79 .net
やった事ないけど、tableに突っ込んで__gcイベント捕まえれば逝けない?
264:デフォルトの名無しさん
13/11/03 21:02:45.16 .net
lightuserdataのuserdataに対するメリットって何?
リファレンス見ても機能が少ないだけで何が嬉しいか分からなかった。
265:デフォルトの名無しさん
13/11/04 00:14:11.47 .net
>>259
そこまでやるならもうAngelScriptの方がいいような気がする。
266:デフォルトの名無しさん
13/11/04 00:19:18.11 .net
>>262
ポインタもってるだけだから圧倒的にシンプルだよ。luaがわでは寿命管理しないけどとにかくデータの参照を維持したい場合に使う
267:デフォルトの名無しさん
13/11/04 00:23:01.58 .net
>>259
tableじゃなくてuserdataのmetatable使うのか。面白そうなのでやってみた
配置newを定義して__gcをセットしたmetatableを設定する. gcでデストラクタを明示的に呼ぶ
class a{
void *operator new(size_t size, lua_State *L) {
void *p =lua_newuserdata(L, size);
lua_newtable(L);
lua_pushcfunction(L, gc);
lua_setfield(L, -2, "__gc");
lua_setmetatable(L, -2);
return p;
}
static int gc(lua_State *L) {
a *p = static_cast<a *>(lua_touserdata(L, -1));
p->~a();
return 0;
}
};
// newと同時にLUAスタックにプッシュされる
a *a1 = new(L) a;
268:デフォルトの名無しさん
13/11/04 01:05:41.10 .net
変数がスコープから消えるときは__gcでイベントをとれるとして、
lua内の変数のコピーも認識できないとdeleteしていいかわからないなぁ。
269:266
13/11/04 01:11:07.79 .net
と思ったけど、__gc呼ばれるときは問答無用でdeleteしていいのかな?
270:デフォルトの名無しさん
13/11/04 01:56:57.82 .net
そもそもスコープぬけてすぐgcよばれる保証あるの?という素朴な疑問
271:デフォルトの名無しさん
13/11/04 02:42:16.33 .net
無いです!
272:デフォルトの名無しさん
13/11/04 03:46:09.89 .net
参照カウンタではないGCを使う言語は、
あんまりそういう作りになってないなぁ
273:デフォルトの名無しさん
13/11/04 09:52:17.93 .net
スコープぬけてすぐってのは
newではないコンストラクタを使うからできるんだよ
newを使わない保証があるなら参照カウンタもいらないよ
274:デフォルトの名無しさん
13/11/04 15:21:11.51 .net
スコープ抜けてすぐなんて制約条件を勝手に厳しくするなよ
> このlua内の変数のスコープがはずれたりしたときに、
275:デフォルトの名無しさん
13/11/04 15:38:02.02 .net
質問者の意図はたぶんそれで合ってると思うの。C++使う人がluaで嵌まる典型的ポイントだよね
明示的なリソース廃棄処理つくらないと回避できない
276:デフォルトの名無しさん
13/11/04 16:24:50.58 .net
>>272
あはは、たしかにw
スコープがはずれたとき
ではなく
スコープがはずれたりしたとき
であるから
結局GCで事足りるなw
277:デフォルトの名無しさん
13/11/04 18:42:33.31 .net
リソースの解放(例えばファイルのクローズ)をデストラクタで
行うなんてのはGC備えてる言語じゃ禁じ手じゃん。
C++オブジェクトに限らず、Luaオブジェクトでもスコープ外れた
タイミングで即解放なんて無理でしょ。
C++と同じようなスコープ外れて即廃棄は無理なので、それの寿命
をLuaオブジェクトで管理しようというなら設計が間違ってる。
278:274
13/11/04 19:39:14.73 .net
やらない ってのと やれない っては大きな違いがある。
このケースは前者でやる必要がないからやらないだけなんだよ。
やればやれるよ?
metatableのdestructorで
時限付きにhookONしてそこでcollectすればいいだけでしょ?
で、それがなんだよって話。
279:デフォルトの名無しさん
13/11/04 22:38:46.70 .net
AngelScript|Д`)<俺の出番だな
いやマジで
280:デフォルトの名無しさん
13/11/04 23:06:44.14 .net
JavaでGC避けようとするとこんな感じのがある。
URLリンク(www.javafesta.jp)
URLリンク(www.infoq.com)
281:デフォルトの名無しさん
13/11/04 23:17:12.73 .net
squirrelがリファレンスカウントなのもgc動作を嫌ってだな
282:デフォルトの名無しさん
13/11/05 00:28:39.93 .net
リファレンスカウンタの方がマーク&スイープよりも安いからな。
283:デフォルトの名無しさん
13/11/05 08:03:02.46 .net
Javaや.NETのGCくらいになると無茶苦茶高性能だよ
Javaはチューニングがサーバー用だからアレだが
まあそこまでいかないと性能が出ないなら個人レベルでは無理があるわな
284:デフォルトの名無しさん
13/11/05 12:38:56.98 .net
AngelScriptは基本的には参照カウントのようだが循環参照時などはGCをする模様
285:デフォルトの名無しさん
13/11/05 20:08:05.76 .net
AngelScript|Д`)<AngelScript2.28.0記念カキコ
286:デフォルトの名無しさん
13/11/05 20:24:10.43 .net
(´\r-、 ┼ + /`/`) +
┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
/ /
(_ ⌒丶..
| /ヽ }.
し ))
ソ トントン
287:デフォルトの名無しさん
13/11/05 23:42:30.14 .net
参照カウントってGCとちがうものなの?
288:デフォルトの名無しさん
13/11/06 09:10:15.25 .net
知ったかに構うなよ
289:デフォルトの名無しさん
13/11/07 07:39:13.29 .net
でもまあ一般的にGCと言えばマーク&スイープじゃね
参照カウンタって単なるコーディングテクニックみたいなもんだから注釈なしでGCと呼ぶのは抵抗ある
290:デフォルトの名無しさん
13/11/07 09:59:04.25 .net
全然違う
291:デフォルトの名無しさん
13/11/07 12:43:45.41 .net
>>285
GCの実装の仕方の一つとして、参照カウントを使うものがある、といった感じ
292:デフォルトの名無しさん
13/11/07 15:16:54.50 .net
広義ではGCに含まれる。
狭義では参照カウントとtracingに分けて、tracing型のみをGCとすることもある。
まだ一般的ではないが "A unified theory of garbage collection" という論文によれば、
参照カウントとtracingは双対なんだそうだ。
293:デフォルトの名無しさん
13/11/07 20:06:48.85 .net
Squirrelの人が熱弁してたなあ
294:デフォルトの名無しさん
13/11/15 18:43:55.94 .net
当方素人で疑問なのですが、スクリプトでゲームを作るということが、
つまりどういうことなのかっていうのがイマイチ掴めません
例えば、C/C++コード(DxLibやSDLなど)で適当にゲームウインドウを表示したら
あとはスクリプトコードを呼び出すだけ、という状態のことなのでしょうか?
このときに、最低限としてスクリプト側からC側の
・メインループ毎に必要な処理(DxLibのProcessMessageなど)
・キーボード・マウス・ジョイパッドなどの入力を取得する機能
・画像を表示する機能
など、呼び出すことができれば最低限ゲームっぽいことはできそうでしょうか?
そして、速度の問題がある処理はその都度C側で記述していく、とか
あるいは、あるタイミングの数値計算処理であるとか、RPGのイベントだとか
再コンパイルせずに調節したい場合にスクリプトを用いるということもあると思いますが
この場合、スクリプトを実行するVMをどのインスタンスで保持するのが良いのでしょうか
295:デフォルトの名無しさん
13/11/15 19:49:12.61 .net
ネイティブで書きにくいところをスクリプトで書く
それだけの話であって何から何までスクリプトということは無い
296:デフォルトの名無しさん
13/11/15 20:47:11.59 .net
自分はゲーム内のオブジェクトの動きや描画の指定にスクリプト使ってるよ。
297:デフォルトの名無しさん
13/11/15 21:58:13.61 .net
スクリプト言語による効率的ゲーム開発 新訂版 (LuaとC/C++連携プログラミング)
とか、luaとゲームみたいな本には序章あたりにそういうこと書いてあるから、何冊か本屋でみてみたら?
298:デフォルトの名無しさん
13/11/15 22:02:34.14 .net
>>293 >>294 >>295
どうもありがとうございます!
いつもいつもプログラミングのみでミニゲーム作る止まりなので
スクリプト組み込みを勉強してに中規模以上のゲームを作れるようにがんばります
299:デフォルトの名無しさん
13/12/04 01:39:29.32 .net
iPadで動くCodeaって、内部でLua使ってるみたいだね。
300:デフォルトの名無しさん
13/12/15 20:30:59.57 .net
ゲームの会話シーン(ノベルゲーム風)をスクリプトで記述したいんですが、
やり口としてはどういうのが良いでしょうか?
今考えているのは
・会話イベントのひとまとまりごとに1ファイルで記述する
・文章を記述する前に置換文字や会話に使用するキャラクターを定義できる
・会話シーンに必要なアクション(立ち位置、表情変更など)を記述できる
想像してるイメージとしては↓な感じです
(使用スクリプト未定なので文法やメソッド名は適当です。雰囲気が伝わればいいですが・・・)
//event1.txt
//最初に置換文字や、使用キャラクターを定義
player = data.getCharacter("主人公"); //キャラ自体を取得
sub = data.getCharacter("サブキャラ");
city = data.getString("街の名前"); //置換文字として定義
//イベント開始
startEvent();
setCharacter(sub);
message(
"いらっしゃい " + player + "さん。" + BR +
city + "にようこそ。");
//キャラクタークラスはそのまま文字置換にも使えるようにする。
//BRには改行を定義しておく。
endEvent();
//
これだとダブルクォーテーションがクドい気がするので "ようこそ$[player]さん" みたいなやり方にすべきでしょうか?
301:デフォルトの名無しさん
13/12/15 20:51:22.29 .net
そんなのは簡単な独自言語のほうが使いやすいしツールも作りやすい
安直に汎用スクリプト使おうじゃなくて、まずはユースケースを洗い出してみろ
それほどいろんな機能も自由度もいらないことがわかるはず
302:デフォルトの名無しさん
13/12/16 00:21:21.85 .net
セーブの実現性考えてつくるべし
下手に高級言語にすると死ぬ
人に使わせること考えると、プレーンテキストにタグ埋めるスタイル以外はあり得ない
303:デフォルトの名無しさん
13/12/16 00:49:52.86 .net
同意
セーブや細かい制御のことを考えると、汎用言語を使っても結局
言語内DSL的なものでデータとして埋め込むような形にしかならん
汎用言語の機能をほとんど活かせず、インタプリタを作る手間も無くならず、
ただスクリプトを書くのが面倒になるだけ
304:デフォルトの名無しさん
13/12/16 01:33:50.36 .net
途中セーブって鬼門だしな…
305:デフォルトの名無しさん
13/12/16 18:01:34.83 .net
>>299-302
ありがとうございます、セーブ完全に考えてませんでした。
途中セーブ考えると難易度かなり上がりますね。
306:デフォルトの名無しさん
13/12/16 21:48:48.52 .net
独自スクリプトなら好きなように出来るから、どうとでもなるよ
ADVゲームなんて保存しておくデータは少ないしな
307:デフォルトの名無しさん
13/12/19 20:06:48.55 .net
if文の中のwhile文の中のif文のさらに中のwhileの途中でスクリプトを停止してセーブ、ロードしてそこから再開、とか。
308:デフォルトの名無しさん
13/12/19 21:22:15.85 .net
stateパターンでも使えば?
309:デフォルトの名無しさん
13/12/19 21:35:40.70 .net
>>305
ADVは普通そんなとこでセーブする必要ないよ
もし必要になってしまってるなら設計がおかしい
310:デフォルトの名無しさん
13/12/19 21:54:56.69 .net
DSL専用の言語ってあってもいいのにな
ADVのスクリプトみたいなプル型のインタプリタを作りやすい簡単な言語仕様で
ライブラリにソース渡したら構文解析だけやってくれればいい
311:デフォルトの名無しさん
13/12/19 22:41:18.53 .net
「設計がおかしい」ってさ、
言うのは簡単だしいかにもそれっぽいけど単なる思考停止くさいよね
312:デフォルトの名無しさん
13/12/19 23:00:23.25 .net
>>308
EclipseのXtext/Xtendみたいなのでネイティブアプリに組み込める
ものがあったら俺も欲しいな。
313:デフォルトの名無しさん
13/12/19 23:01:36.14 .net
ターン制と言うか、区切りよく設計しない?
大枠のwhileループとifはあるにせよ、更にその中のwhileの中でセーブはともかくロードはやろうと思わない。
314:デフォルトの名無しさん
13/12/19 23:38:35.63 .net
任意のObjectをセーブ、ロード
↓
Object is a String ←設計がおかしい
315:デフォルトの名無しさん
13/12/20 01:55:56.71 .net
>>305
フラグでメッセージが変わる、とかいうのを複雑にしちゃったらそういうのが発生しそう。
316:デフォルトの名無しさん
13/12/20 12:14:01.98 .net
フラグで文章が変わるなら、変わる文章の手前で条件分岐するだけじゃね?
317:デフォルトの名無しさん
13/12/20 17:12:52.37 .net
変わるのがメッセージだけなら、
flg ? "msg-a" : "msg-b"
って書けるならそのほうがシンプル。
318:デフォルトの名無しさん
13/12/20 21:11:54.76 .net
それだと既読フラグがめんどい
319:デフォルトの名無しさん
13/12/21 08:21:18.69 .net
シンプルだけど読みにくい
320:デフォルトの名無しさん
13/12/22 12:54:39.25 .net
慣れの問題
321:デフォルトの名無しさん
13/12/23 08:32:10.39 .net
慣れないとダメというのがそもそもおかしい
322:デフォルトの名無しさん
13/12/23 11:28:02.04 .net
逆だよ
時間がかかってはダメというのがおかしい
だからゆっくり時間をかけて慣れることが許される
323:デフォルトの名無しさん
13/12/23 12:34:02.63 .net
>>319
俺が慣れてないからforもwhileも禁止、全部ifとgotoで、って言ってた人が昔いたぞ。
>>316
既読を管理する関数 mng_read ってのを作って、
flg ? mng_read("msg-a") : mng_read("msg-b")
とするのはどう?
324:デフォルトの名無しさん
13/12/23 22:24:13.34 .net
>>321
ADVで文章部分に関数使うとか論外だろ…
それにスクリプト打つのはド素人も想定するもんだ
325:デフォルトの名無しさん
13/12/23 22:49:00.75 .net
>>321
そんなBASICでプログラミングを覚えたジジイなんて、
玉切り落としてグズの家系を根絶やしにしてしまえ。
GOTO LESSが推奨されて何年立ってると思っているんだ
326:デフォルトの名無しさん
13/12/24 09:54:37.59 .net
IFとGOTO以外理解できないド素人も想定しなきゃダメですよw
327:デフォルトの名無しさん
13/12/24 13:19:00.89 .net
そりゃシステムの部分でわざわざGOTO使う事はないけど
シナリオスクリプトと�
328:オて考えたらはGOTOは大事だろ IFとGOTOだけで書けばセーブデータの問題も解決するわけだし
329:デフォルトの名無しさん
13/12/24 13:43:33.10 .net
チャートの類をつくろうとすると、たとえADVのスクリプトでもgotoもifも禁止だね。バグの温床になる
そういった場合は、遷移は別ファイルにまとめて定義が妥当
330:デフォルトの名無しさん
13/12/24 17:08:31.18 .net
プログラムではまずありえないけど、ループのド真ん中に外から飛び込むジャンプって、
ゲームのシナリオ的にはありそうじゃない。そういうのってどうしてるの?
331:デフォルトの名無しさん
13/12/24 19:11:38.28 .net
gotoは、終了タグを省略したhtmlとか、breakしないswitchと同じだと思う
逆に言えば終了タグを必ず書くgotoなら使っていいんじゃね
332:デフォルトの名無しさん
13/12/24 19:40:46.56 .net
come from文?
333:デフォルトの名無しさん
13/12/24 20:16:45.26 .net
途中でセーブしてそこから続きが出来るようにしないのなら、どんな組み方してもOKだけどな。
334:デフォルトの名無しさん
13/12/24 21:28:56.06 .net
>>326
条件分岐使わずどうやってフラグ分岐するんだ?
>>327
そんなの見たことないが、どういうのだよ?
335:デフォルトの名無しさん
13/12/24 23:30:35.65 .net
>>331
だから別ファイル
どのシーンの次にどのシーンになるのかの
状態遷移だけを記述する言語というか
データ構造を別に準備するのさ
336:デフォルトの名無しさん
13/12/24 23:50:48.99 .net
想定してるのがどういうゲームかで違うのかも
例えばLiveMakerのシナリオ部分は文章とか画像とかの指定で
条件分岐は別になってる
シナリオ書き変えたら分岐も変わってた…なんてことはない
単純に選択肢で話が大きく分岐していくノベル用にはわかりやすくていい
でも細かいフラグ管理やパラメータ要素を入れると難しい
分岐ごとにいちいち分けて考えてたら
バグは出ない以前に途中で投げ出す可能性大
337:デフォルトの名無しさん
13/12/25 01:12:07.86 .net
適当にシナリオ用のVM作ってステートセーブさせれば良いんじゃないかな・・
338:デフォルトの名無しさん
13/12/25 07:14:27.71 .net
プレーンテキストに命令タグを挟む方式だとあかんのですか
ノベルゲーって基本テキスト主体でしょ?
逐次処理できるし、ステートの保存はフラグ一式と行番号の保存でいいし
ループ処理の構文をわざわざ用意する必要ないと思うんだけど・・・
339:デフォルトの名無しさん
13/12/25 10:33:19.18 .net
>>332
あぁ、なるほどね。
確かにそういう作り方をしてるゲームを見た事があるわ。
340:デフォルトの名無しさん
13/12/26 01:56:07.59 .net
ノベルゲーのスクリプトに、Cレベルの制御構文、クラスやコルーチンとかまで入れて欲しいとか言われた事あるわ。
341:デフォルトの名無しさん
13/12/26 10:34:40.60 .net
文章やマクロを使う部分のスクリプトはオリジナルで
クラスやコルーチンのスクリプトは組み込み言語使えば良かろ
342:デフォルトの名無しさん
13/12/26 10:38:32.16 .net
プログラミング知識がある奴用なら
爆速コンパイルのFPCでいいと思うな
343:デフォルトの名無しさん
13/12/26 10:48:29.28 .net
コルーチンはプログラミング言語では直接のサポートがない言語も多いけど、
ゲームのスクリプトとしては需要あるんじゃないかな。
たとえば、ある場所に来るたびに、その場所での「さっきの続き」とか。
344:デフォルトの名無しさん
13/12/26 11:18:48.57 .net
stateパターンでいいじゃん
オーソドックスにフラグ立てていくなりstackでやるなりでいけるでしょ
345:デフォルトの名無しさん
13/12/26 11:41:00.70 .net
手続き的なものは、スクリプトの手続きとして直接記述したいじゃない。
stateパターンというかインタプリタパターンで、その場用のミニ言語を作るんじゃなくて。
346:デフォルトの名無しさん
13/12/26 11:56:29.21 .net
コルーチンのことをIteratorと言う人とStateと言う人とInterpreterと言う人がいるけど
気分で名前が変わるくらいなら名前つけない方がよいよね
347:デフォルトの名無しさん
13/12/26 12:15:58.74 .net
いきなりどうした
348:デフォルトの名無しさん
13/12/26 12:24:14.01 .net
いや全部別のものだし
349:デフォルトの名無しさん
13/12/26 12:28:28.45 .net
>>342
> 手続き的なものは、スクリプトの手続きとして直接記述したいじゃない。
すればいいじゃない
> stateパターンというかインタプリタパターンで、その場用のミニ言語を作るんじゃなくて。
フラグ立てていくだけだからeval出来るものなら既存の言語で簡単に出来るよ
記述が冗長でという話ならpegかなんかでちょろっとgeneratorを書いてやらいい
350:デフォルトの名無しさん
13/12/28 02:26:08.74 .net
動的型のスクリプトの凄さわからなかったんだけど
クラスじゃなくって、インスタンスをバインドして
そいつがファクトリ的な関数いっぱい持ってたら
もうスクリプトの中でやりたい放題なんだね
351:デフォルトの名無しさん
13/12/28 13:42:09.78 .net
リモートでバッグが容易
かつ、お作法も確立してるので楽ちんなんだよな
352:デフォルトの名無しさん
13/12/29 23:59:20.84 .net
最近VLCビデオプレイヤの機能拡張言語がLuaだったのにやっと気づいた
353:デフォルトの名無しさん
13/12/30 00:02:51.79 .net
おめ
354:デフォルトの名無しさん
13/12/30 00:32:29.40 .net
DXライブラリでゲーム作ってて、スクリプトを組み込んでみたいんですが、
メインループ中にスクリプトをどのように組み込んでいけばいいのかまったく検討がつきません。
RPGのマップ上のイベントであれば、マップロード時にスクリプトファイルを読み込んで
イベントを関数化しておく、などは想像できるのですが・・・
それとも、主要クラスをスクリプトエンジンへバインドしてしまって
メインループ自体をスクリプト側で記述するという方法なのでしょうか?
355:デフォルトの名無しさん
13/12/30 01:54:24.29 .net
一般的には各オブジェクトのフレーム毎処理なり、メインループの段階ごとなりにスクリプト用のフックを準備して、それ経由で呼び出しされるようなイベントドリブンな書き方をすればいい。これは別に普通にCで書くのと特に変わらない
luaとかsquirrelのようなコルーチンありのスクリプトなら、メインループから、実行中のコルーチンスレッドのresumeを個別に呼び出しする形も作れる
それぞれのスレッドで suspend()するたびに
次のフレームに処理が継続されるので、UI処理書くのにとても便利
両方実装して使い分けるのも有り。いずれの場合も、参照するオブジェクトはスクリプトから見えるようにバインドする必要はでてくる
356:デフォルトの名無しさん
13/12/30 17:04:01.21 .net
>>352
ありがとうございます!
コルーチン勉強しようと思います
357:デフォルトの名無しさん
14/01/15 01:28:40.37 .net
AngelScript|Д`)ノ<遅くなったけどあけおめ。今年もスクリプトエンジョイしよう
358:デフォルトの名無しさん
14/01/15 01:32:56.88 .net
おっそーい
359:デフォルトの名無しさん
14/01/15 18:55:31.97 .net
ZekamasiScriptの登場が待たれる
360:デフォルトの名無しさん
14/01/16 23:05:15.79 .net
C++でクラス定義を公開してバインド。
Suirrelでインスタンスを生成したとき、
boost::shared_ptrを用いたインスタンスにするにはどうすればいいでしょうか。
C++とSquirrelとで共通の参照カウンタを持たせたいと考えています
361:デフォルトの名無しさん
14/01/16 23:29:03.57 .net
luaならレジストリを使ってやるから同様の逃げ道はあるだろうけど
そういうのが必要なケースってあるのかな?
設計を見なおしたほうがいいかも
362:デフォルトの名無しさん
14/01/17 00:50:30.25 .net
luabind使ってる時は自然と出来たものですから、
こっちでも使いたいなーと思ってました。
・C++でHogeクラス定義、公開
・Squirrelでインスタンス生成
・C++から公開しているオブジェクトマネージャへ登録
・C++側でさっきのHogeインスタンスを更新
みたいな構造を考えてました。
Hogeを継承したFooクラスとかも登録したいと考えてました。
設計考えてきます。
363:デフォルトの名無しさん
14/01/17 02:10:14.78 .net
対応したバインダかくだけじゃね?
squirrel側の参照カウンタとはダブるだけで共通にはならんけど動作自体は問題ない
364:デフォルトの名無しさん
14/01/17 04:46:37.29 .net
HogeをC++で定義、公開。
g_HogeManagerをC++で定義、インスタンスをSquirrelへ公開。
で、次のスクリプト関数実行。
function Func(){
local inst = Hoge()
g_HogeManager.add(inst)
}
で、C++側でg_HogeManagerの要素に対してupdateとか呼び出したいです。
Funcのスコープ抜けた時点でSquirrel側のinstの参照カウンタが0になり、
望まない形でインスタンスが破棄されてるようです。
ので、共通の形を取りたいと考えてました。
設計が悪いってのは、この周りの考え方が怪しいのかと。
365:デフォルトの名無しさん
14/01/17 04:48:04.70 .net
366:デフォルトの名無しさん
14/01/17 08:09:28.29 .net
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
367:デフォルトの名無しさん
14/01/17 16:23:55.46 .net
>>361
そりやsquirrel側はC++側の参照を知らないもの。当然かと
squirrelから渡されたものは、HSQOBJECT のかたちで取得して、保持するときには sq_addref()して、不要になったら sq_release() するのが正解
368:デフォルトの名無しさん
14/01/17 18:31:37.39 .net
あ、gHogeManagerがなんのためのものかにもよるけど、addrefしたものは当然C++側でもreleaseしないと消えなくなるから注意な
メモリリークの原因になりやすい
369:デフォルトの名無しさん
14/01/22 20:05:40.98 .net
AngelScript|Д`)<ASの得意分野の話をしてると聞いて
370:デフォルトの名無しさん
14/01/31 16:55:15.38 .net
squirrelって文字列比較できないんでしょうか?
自分で関数を作るしかない?
371:デフォルトの名無しさん
14/02/01 23:19:13.62 .net
Squirrelのthreadを外部からidle状態にさせることはできるのでしょうか。
現在、threadをidle状態にさせるために、wakeupで終了条件を渡して
threadとして実行する関数内でreturnなりさせてidle状態にさせていますが面倒です。
372:368
14/02/02 00:01:58.47 .net
手法変えて自己解決しました
373:デフォルトの名無しさん
14/02/02 00:31:12.85 .net
(´\r-、 ┼ + /`/`) +
┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
/ /
(_ ⌒丶..
| /ヽ }.
し ))
ソ トントン
374:デフォルトの名無しさん
14/02/03 05:51:52.94 .net
Cocos2dx + lua が最強
375:デフォルトの名無しさん
14/02/05 23:25:39.46 .net
Squirrelでthreadの実行関数内でスタックダンプってどうやってとるの?
sqstd_printcallstackをラップしたのをバインドしてthreadの関数内で呼び出しても、
thread.callとかthread.wakeupんとこまでのスタックしか見れなくてデバッグが面倒
376:デフォルトの名無しさん
14/02/06 01:00:28.57 .net
そこから上は別のVMだから当然では
377:デフォルトの名無しさん
14/02/06 13:14:51.80 .net
あ、なるほど。
ってことはsq_getthreadとかと組み合わせれば出来んのかな。
助かったよ、ありがとう
378:デフォルトの名無しさん
14/02/06 16:31:10.12 .net
AngelScript|Д`)<AngelScript2.28.1記念カキコ
379:デフォルトの名無しさん
14/02/06 16:34:11.87 .net
>>374
スレッド制御してるVMがグローバルに一つなら、そのwakeup呼び出ししてる間は
とくに変化無いから、もうグローバルに直接参照して表示してしまうってのも一つの手だね
俺はそれぞれのスレッドのwakeupは、全部C++のメインの一カ所からしか呼ばない(親VMは登録とかにしか使わない)から上をたぐる必要は特に無い
380:デフォルトの名無しさん
14/02/06 19:41:13.19 .net
なるほど、そういう方法もあるのか。検討します。
で、早速また分からんことが。
・スクリプトでnewthreadで生成したスレッドをC++にてsq_getthreadで取得
・取得したvmに対してsq_newclosure,sq_seterrorhandlerで
ランタイムエラーハンドラを設定したんだけど、
スレッド実行中にエラー出ても呼ばれないんですが原因なんでしょう。
同じノリでC++からsq_setprintfuncで出力関数をセットすると期待通りに動作するんだけど。
381:デフォルトの名無しさん
14/02/06 20:13:41.72 .net
sq_notifyallexception しとかないと常にはよばれなかったような記憶
382:デフォルトの名無しさん
14/02/06 20:42:06.75 .net
おぉ、呼ばれた!ありがとう!
383:デフォルトの名無しさん
14/02/10 11:35:20.59 .net
スレチか悩んだがココで。
トゥイッターで「#squirrel」を検索するとマジもんのリスばっか出てくる。
どのハッシュタグならココで扱ってるSquirrel拾えるの?
384:デフォルトの名無しさん
14/02/10 11:43:35.22 .net
本家で聞けよ…
385:デフォルトの名無しさん
14/02/28 21:55:32.80 .net
ゲーム用途のスクリプトのことを学べば学ぶほど、最終的にはマップエディタや、
アイテムデータを打ち込むためのフォームなどを自作しておかないと、
スクリプトの良さを生かせないなぁ、というところに行き着いてしまうのですが、
個人製作の方々はそういったものを自作していたりするんでしょうか?
むしろ、そんなところに拘るくらいならUnityや他のゲーム製作ツールについて
勉強してた方がマシでしょうか?
386:デフォルトの名無しさん
14/02/28 22:11:10.98 .net
まず、自作するまでもなく
一般的なものならinport/exportで定番どころのフォーマットは対応してるので困ることはないのではないかな
対応してないとしてもconverterを書くだけだから簡単に書ける
387:デフォルトの名無しさん
14/02/28 22:15:28.12 .net
スクリプトの良さを生かそうという発想が生まれる時点で
既に道を踏み外している
ゲームを完成させたいなら計画を立て直せ
そうでないなら合理性なんか考えず好きなように楽しめ
388:デフォルトの名無しさん
14/02/28 22:17:33.95 .net
スペルミスってるな
まあいいや
389:デフォルトの名無しさん
14/02/28 22:31:38.48 .net
>>383
既存のモノで、マップエディタならJsonあたりで出力できるものや、
データ入力ならCSVエディタや、既存DB用ファイルを出力するエディタあたりでしょうか?
>>384
確かに、そうですね・・・
まだ数回しかチャレンジしてないのですが、どうしても毎回、
「プログラムで直書きしたのと変わらんやんけ!」か、
「CSVで十分やんけ!」という状況ばかりになってしまって、
そこから一歩ステップアップできない感じなのです
390:デフォルトの名無しさん
14/02/28 23:01:28.08 .net
AngelScripterさんがいたら教えてほしい
RegisterObjectType に asOBJ_POD を渡すとコンストラクタ、
代入演算子その他諸々が自動生成されるって話だけど、
asOBJ_POD | asOBJ_APP_CLASS_CONSTRUCTOR みたいにして
コンストラクタだけ独自拡張する使い方は仕様的にできるようになってるの?
391:デフォルトの名無しさん
14/03/01 07:44:24.61 .net
>>386
目的と手段が逆になってんじゃないの?
392:デフォルトの名無しさん
14/03/01 10:43:43.37 .net
>>387
普通にコンストラクタも登録できるから
公式リファレンス見ろ
393:デフォルトの名無しさん
14/03/01 11:25:09.70 .net
Lua自体はC++を使ってなくて「Cで十分やんけ!」という状況なので
もしC++を使ってる人がLuaは不要だと言えば、C++の方が不要だと言い返される気がする
394:デフォルトの名無しさん
14/03/01 12:09:22.88 .net
>>382
コンシューマだったり、プログラマ以外の作業員がいたり
アドベンチャーゲームみたいなジャンルだったらメリットが大きいと思うけど
個人製作だったら別に無理して活かす必要は無いような
395:デフォルトの名無しさん
14/03/01 13:21:37.93 .net
スクリプト使えば最コンパイルなしで高速に微調整ができるっていうけど
個人製作だとスクリプトファイルとかその他リソースを再読み込みする時間の方が
長かったりするのは俺だけ?てかみんなはスクリプトファイルどれくらい分割してる?
396:デフォルトの名無しさん
14/03/01 15:07:27.08 .net
>>392
ゲームは再起動するんだから、
他のリソースふくめたロード時間は
スクリプトつかっててもつかってなくても大差ないかと
スクリプト単体のロード時間は誤差の範囲だよ。確実にコンパイル&リンク時間のが長い
397:デフォルトの名無しさん
14/03/01 15:08:56.52 .net
LOVE使っててそれは思った
398:デフォルトの名無しさん
14/03/01 15:29:29.09 .net
>>392
修正したファイルだけ再読み込みできるようにしておくといい感じ
399:デフォルトの名無しさん
14/03/01 15:29:47.45 .net
>>393
392じゃないけど
どのリソースを読み込むかスクリプトで指示されているから
スクリプトの再読み込みはその他リソースの再読み込みとほぼ同義で
時間がかかるって話じゃないの
だから
スクリプト単体のロード時間が誤差の範囲なのは自明で
それをコンパイル&リンク時間と比較するのはこの文脈ではナンセンス
400:デフォルトの名無しさん
14/03/01 15:47:17.62 .net
>>396
スクリプトがコンパイル時間がかからなくて便利って話は、そもそもその単純比較の場合の話だから、そのメリットが得られてないならそれは作りが悪いってことだよね。結局のところ
401:デフォルトの名無しさん
14/03/01 15:47:27.35 .net
>>395
それを実現するためには副作用を減らす設計が重要で
とりあえずスクリプトで実装して
重い処理はホスト言語で実装しなおす
みたいなボトムアップな作り方してると困っちゃうんだよね
というか困った
402:デフォルトの名無しさん
14/03/01 15:57:47.84 .net
>>397
それは「スクリプトがコンパイル時間がかからなくて便利」ってのが
真である前提の結論だろ
実際は単なる謳い文句だよねって話じゃないの?
てかスクリプト言語使う動機なんて一つじゃないんだから
そんなことで作りの良し悪し評価されたくないよな
403:デフォルトの名無しさん
14/03/01 16:47:42.14 .net
>>389
リファレンス見てもPODで自動生成されたコンストラクタに
独自拡張のコンストラクタが上書きされるとか書いてなくね?
スレの趣旨には反するけどAlcantarea使えば諸々の問題解決できるよね。
実行中のプログラムの関数を再コンパイルして差し替えてくれるVSのアドイン
URLリンク(alcantarea-cpp.com)
404:デフォルトの名無しさん
14/03/01 16:57:41.84 .net
>>398
副作用を減らすんじゃなくて寿命を減らせばいいと思う
修正前の古いデータが生き残らないようにする
405:デフォルトの名無しさん
14/03/01 17:09:03.44 .net
>>399
良い悪いって言葉が気に入らないなら、
設計思想が合ってない、ってことでひとつ
宝の持ち腐れにしてまで使う意味はないな
406:デフォルトの名無しさん
14/03/05 17:03:30.70 .net
今から始めようと思うんですけど
C++で使えますか?
Cでの導入方法を教えて下さい
407:デフォルトの名無しさん
14/03/05 23:29:20.69 .net
>>403
冷やし中華を?
408:デフォルトの名無しさん
14/03/06 03:15:58.29 .net
>>403
何を?
409:デフォルトの名無しさん
14/03/06 04:44:07.89 .net
get started からダウンロードして
インクルードファイルとライブラリファイルを設定して、プロジェクトのプロパティで追加の依存ファイルにlua5.1.libを追加すればいいんですね。
後、クラスのメンバ関数をLuaから使う方法が理解できない
local 変数に関数を代入するの?
410:デフォルトの名無しさん
14/03/06 06:38:39.31 .net
lua では C でいうところの関数名=変数名となってるから大体合ってる
411:デフォルトの名無しさん
14/03/20 17:29:02.65 Moc5bE7b.net
AngelScript|Д`)<AngelScript2.28.1記念カキコ
412:デフォルトの名無しさん
14/03/20 17:29:20.35 Moc5bE7b.net
ごめん2.28.2だ
413:デフォルトの名無しさん
14/03/20 17:38:01.94 cnVVzBAE.net
(´\r-、 ┼ + /`/`) +
┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
/ /
(_ ⌒丶..
| /ヽ }.
し ))
ソ トントン
414:デフォルトの名無しさん
14/04/06 22:57:21.17 OYl5erDz.net
cocos2d-x3.0 Luaバインディング使ってるんだけど
コード補完が出来るオススメエディタありませんか?
cocos2d-x2.x 時代は tolua++のpkgファイルあったから
Eclipseプラグインでコード補完出来たけど
3.x は探してもpkgみつからないの・・
415:デフォルトの名無しさん
14/04/07 00:09:17.03 wNleVxO3.net
Squirrel 3.0.6 stable
416:デフォルトの名無しさん
14/04/08 23:44:03.23 tbmdAmxp.net
>>411
intypeってテキストエディタではダメ?
417:デフォルトの名無しさん
14/05/11 11:14:07.30 FPHyRsPY.net
>>414
ない
418:デフォルトの名無しさん
14/05/11 12:58:32.06 ahIxA60o.net
作りかけならあるみたい
URLリンク(github.com)
URLリンク(github.com)
419:デフォルトの名無しさん
14/05/12 21:27:31.11 Jr9LnoLr.net
Lua って 5.3 で整数型が導入されるのか。
整数型なんていらんかったんや! というこれまでの解説は間違いだったのか?
それとも、ゲームだけでなく、カーネルに近いところでも使われ始めたからなのか?
420:デフォルトの名無しさん
14/05/12 22:45:02.79 rRKhLlHV.net
内部では結構前からあった気がする
テーブルの整数添え字の要素を特殊化したりとかその関係で
記憶違いだったらごめん
421:デフォルトの名無しさん
14/05/12 23:06:44.25 fjbQFkov.net
それはインデックスとして使われるときに整数に変換されるだけで、値として整数を保持してるわけじゃないよ
満を持して登場したと思ったらさっそくdeprecatedにされたbit32ライブラリさんかわいそう
422:デフォルトの名無しさん
14/05/12 23:22:03.10 fjbQFkov.net
ああひょっとして特殊化ってのはテーブルのarray partのことを言ってるのかな
423:デフォルトの名無しさん
14/05/13 01:10:36.92 1hVKdVzY.net
>>416
NetBSDはカーネル内部でLua使えるらしいぞ
それの関係かどうかまでは知らんが
URLリンク(news.mynavi.jp)
424:デフォルトの名無しさん
14/05/13 09:56:07.37 htOfSQyE.net
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
425:デフォルトの名無しさん
14/05/18 06:43:02.86 cy7ef2kl.net
整数型導入でさらに速くなるみたいね
426:デフォルトの名無しさん
14/05/18 14:03:13.72 HDWDipXQ.net
eLuaという、マイクロコントローラ向けのさらに軽量なLuaもあるらしい
URLリンク(www.eluaproject.net)
427:デフォルトの名無しさん
14/06/08 18:05:42.02 3LWaPBPW.net
Xtalってもう更新してないのかな
GoogleCodeのは2008年で止まってるし
428:デフォルトの名無しさん
14/06/08 20:03:09.73 RRJgBzCO.net
>>424
URLリンク(code.google.com)
履歴見たら2013年11月13日が最終更新日だけど、どこ見てるんだ?
429:デフォルトの名無しさん
14/06/08 22:43:44.01 3LWaPBPW.net
>>425
本当だ・・・
Downloadsのパッケージしか見てませんでした
ごめんなさい
430:デフォルトの名無しさん
14/06/11 12:26:03.22 nbPEp42H.net
AngelScript|Д`)<AngelScript2.29.0記念カキコ
431:デフォルトの名無しさん
14/06/11 16:57:16.91 mGpoQXd/.net
(´\r-、 ┼ + /`/`) +
┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
/ /
(_ ⌒丶..
| /ヽ }.
し ))
ソ トントン