[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 17:59 / Filesize : 301 KB / Number-of Response : 931
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

▼ノベルゲームツールを作っちゃうぞ!Ver3.0



1 名前:名前は開発中のものです。 [03/07/31 21:37 ID:L/7S/kPx]
ノベルゲームツールを制作中の人達が集うスレです。
新たなノベルツールを作ってやるというチャレンジャー歓迎。

前スレ
▼ノベルゲームツールを作っちゃうぞ!Ver2.0
pc2.2ch.net/test/read.cgi/gamedev/1040118471/

前々スレ
▼ノベルゲームツール作っちゃうぞ!
pc2.2ch.net/test/read.cgi/gamedev/1013170036/

742 名前:名前は開発中のものです。 mailto:sage [2006/10/10(火) 01:14:00 ID:VVRIseRt]
Youその調子でスクリプトじゃなくてGUI化汁!

743 名前:691 mailto:sage [2006/10/11(水) 00:29:21 ID:szAi/qJj]
---------ここからチラ裏

現状報告および開発メモとか愚痴とか

1:ずっと気になっていた文字列の左端が切れる原因がわかった!
縁の幅を考慮してなかったからみたいだぜ
members3.jcom.home.ne.jp/jellyjam/img/text.png

2:MMXによるピクセル操作について
8バイトづつ処理しようとしたらループ内の命令が多くなって逆に遅くなった(´Д`;)

3:LockRect市ね
今までテクスチャ全体をロックしてたんだけど、それよりも必要な矩形だけを
ロックしたほうが速くなるんじゃなかろうかと考えて実践してみた
つまりちょっとした描画ついてもその都度LockRectを呼ぶ事になるわけだが、これがまた逆に重い…
なるべくLockRectを呼ぶ回数を減らすようにしたほうが速いのかも

4:ビットマップのパレットがわかんないんです(><)

ここまでチラ裏--------------

>>742
すみませんよくわかんないです(><)

744 名前:167 mailto:sage [2006/10/11(水) 12:58:19 ID:v5NKuri3]
abyss-21.hp.infoseek.co.jp/Release.zip

アップデートしました、し か し 変 更 点 は あ り ま せ ん ( ; ´ Д ` )
内部仕様を大幅に変更しただけです、しかしこの変更のおかげでプラグインが実装できたかも?
二三日以内に、サンプルのプラグインを作成してうp出来るかもしれません(´・ω・`)

745 名前:167 mailto:sage [2006/10/11(水) 13:04:40 ID:v5NKuri3]
追記
>743
GUI化は専用のエディタを作らなければなりなせんよ、よってスクリプトを先に作るべきかと。

たとえば、Text "発言者名", "内容";という命令があった場合、
Text→発言者名と内容を入力→スクリプトをアプリケーション側が記述といった感じでしょうか。
簡単に言えばホームページ作成ソフトと同じですね、HTMLを弄らなくてもノベルゲームが作れるというか。

746 名前:名前は開発中のものです。 mailto:sage [2006/10/11(水) 13:09:20 ID:9Q/4jY+z]
高機能版Yuuki!を目指しちゃいなYO!

747 名前:691 mailto:sage [2006/10/12(木) 00:23:32 ID:m2DwlIiA]
members3.jcom.home.ne.jp/jellyjam/p/novel11.zip (音なし)

・文字色・フチ色を自由に変更できるようにした
・ホイールの回転で読み進められるようにした
・文字キャッシュの検索方法を変更して高速化?

速度アップのためにいろいろやってみたけど、速くなったんだかなってないんだか・・・
特にメッセージスキップはもっと速くなって欲すぃなぁ
現状を文字で表すなら「ぅおおおおおお・・・・!」だとして、
希望としては「ぅふぬぉおおおおおぉぉぉぉぉお・・・・・!!」ぐらいにはなって欲しい

>>745
エディタかぁ
ゲームよりそういうのを作るほうが好き( ´,_ゝ`)

>>746
同じDelphi製ということで、実は密かに目標・・・というか参考にしてたりして
エディタがユニークだと思う

748 名前:691 mailto:sage [2006/10/12(木) 04:29:15 ID:m2DwlIiA]
members3.jcom.home.ne.jp/jellyjam/p/novel12.zip

すまん、高速化のいい方法を思いついたので上げなおしだ
メッセージスキップがスーパー速くなったかも試練
あと句読点ウェイト入れてみたよ

つーか寝てねーんだよ! 今日も仕事あqswでrftgyふじこlpあzsxdcf
うわあああああああああああああああああああああ

749 名前:名前は開発中のものです。 mailto:sage [2006/10/12(木) 22:55:03 ID:4adqTnrf]
大学生の俺は暇組み、更に学祭中という神イベント発生中。

750 名前:名前は開発中のものです。 mailto:sage [2006/10/12(木) 22:56:06 ID:4adqTnrf]
はい日本語おかしいですね orz
こんな俺は地方駅弁orzorz



751 名前:名前は開発中のものです。 mailto:sage [2006/10/13(金) 19:50:48 ID:DxADPv/2]
時代は私大だ、国立なんて話にならん。

752 名前:691 mailto:sage [2006/10/13(金) 20:39:29 ID:YV5yxr+U]
流れに逆らってすまんが

ゲーム部分に構造的欠陥がみっかったので一部作り直すことにした。
結果として実行速度を落とさず、且つ処理量を大幅に削減することができた。
超すごいぜおれ!

こんな感じ
members3.jcom.home.ne.jp/jellyjam/img/text_test1.png
フチを太くしてみたり
members3.jcom.home.ne.jp/jellyjam/img/text_test2.png
文字間隔を変えてみたり
members3.jcom.home.ne.jp/jellyjam/img/text_test3.png

そんな超すごいおれからみんなに質問があるんだけど・・
吉里吉里にルール画像を使ったトランジションってあるけど、あれどういうふうにやってるんだろう?
ルール画像を参考にして単純にα値を加算していくのかと思ったんだけど、ルール画像を調べてみると
RGB(0, 0, 0)のピクセルがあるんだよぅ このピクセルは加算していっても意味ないよねぇ

753 名前:167 mailto:sage [2006/10/13(金) 22:20:01 ID:0R6SaG7C]
>691
おめでとうございます!…とも言ってられませんなぁorz
私も頑張りませんと(´・ω・`)

下記の話ですが、私もよく分かりません(´Д`)
ただ、トランジションの種類にもよるかと思われます。

・最終的に、「完全」に入れ替わる場合
・一部混合された状態が、「完全」である場合

恐らく上がトランジションの効果だと思われますが、その場合は誤魔化しているのではないかと。
具体的には、α(α値)×a(比例定数)+1みたいな。いや、想像なので答えにならないかもしれませんが。

754 名前:名前は開発中のものです。 mailto:sage [2006/10/13(金) 23:36:08 ID:XAQthbNe]
ソース見てないから判らないけど

alpha = min(max(a + t,0),255)
a : ルールアルファ
t : -255 → 255

こんな感じじゃないの。
Direct3Dでやるのは難しかったような気がする。

755 名前:名前は開発中のものです。 mailto:sage [2006/10/14(土) 02:49:19 ID:QHMCKQ0j]
普通にPixelshaderかな

756 名前:名前は開発中のものです。 mailto:sage [2006/10/14(土) 08:38:07 ID:wDIV82eQ]
>755
ノベルの動作環境にピクセルシェーダを要求なんて、今現在のところギャグじゃね?

マルチテクスチャでSetTextureStageStateを弄ればなんとかなりそう?
もしくはRenderTargetなテクスチャを使ったマルチパスでも可能なのかな?

757 名前:名前は開発中のものです。 mailto:sage [2006/10/14(土) 09:59:35 ID:Tkny+AqF]
www.nhk.or.jp/strl/tvml/japanese/player2/index.html

このくらいはやってくれよ

758 名前:691 mailto:sage [2006/10/14(土) 13:23:33 ID:7hCa6/d9]
おおーすげーレスついてる

>>753-754
> α(α値)×a(比例定数)+1
> alpha = min(max(a + t,0),255)

ふーむなるほど
こんなのよく思いつくなぁ

>>755-756
初めて目にする単語ばかりで頭がクラクラしたけど、最期の力を振り絞って調べてみたよ
ピクセルシェーダって、また別にスクリプト書かなくちゃいけないのか・・・
アセンブラみたいだけどこれまた難しそうだなあ
あと実行環境に縛りがあるみたいだね

マルチテクスチャについては、特にここを読んでみた ttp://platz.jp/~moal/mtexture.html
ああ、えーと? 何が書いてあるのかすら分からないんですが日本語の再勉強からはじめた方がいいでしょうか

うー、この両者はおれにとってはまだ敷居が高そうです
とりあえずPascal+MMXでゴリゴリ書いてみて、それで速度が出ないようなら試してみますー
フレーム毎に全画面書き換えするのが怖くもあるけど、操作するのはαだけだから
それほどクリティカルな速度遅延にはならないはず、と勝手に楽観してます

>>757
ttp://gedo-style.net/g/?v=273092&d=d.jpg

759 名前:名前は開発中のものです。 mailto:sage [2006/10/14(土) 14:31:31 ID:tsJdaQzl]
>>754
>Direct3Dでやるのは難しかったような気がする。
これはギャグのつもりか?
普通にalphaテストで出来るよ。

760 名前:691 mailto:sage [2006/10/14(土) 16:47:20 ID:7hCa6/d9]
members3.jcom.home.ne.jp/jellyjam/p/novel13.zip

うーんできちゃったかもしれん
テクスチャのαチャンネルをクリアあるいは$FFにするためにMMX使ったけど、それ以外はPascal直打ちー
それでも"そこそこ"速度は出てるみたいだ
最適化したらもう少しだけ速くなるかも?

ゲーム中、4回トランジションを行っており、
効果終了までそれぞれ 100, 60, 120, 140 フレームを要するようになってる
命令について詳細は Scenarioフォルダ参照のこと
コントロールキーでメッセージスキップさせちゃうと効果もスキップしちゃうので注意だぜ

ところでZソートがおかしいらしく、文字の描画順がヘンな事に気付いた
まったく、次から次へと問題が見つかるなぁ



761 名前:691 mailto:sage [2006/10/14(土) 17:36:27 ID:7hCa6/d9]
ゲェェーッ文字のα値の計算がおかしい!

一日に何回もすまん、ちょっと修正した
上のリンクに上げ直したよ

762 名前:名前は開発中のものです。 mailto:sage [2006/10/14(土) 20:59:33 ID:NApT4IfZ]
alphatestじゃ滑らかじゃないからヤダヤダ

763 名前:名前は開発中のものです。 mailto:sage [2006/10/15(日) 00:20:45 ID:H7M4nsmQ]
>759
これの一番下こと?
ttp://www.platz.or.jp/%7Emoal/colorkey.html
アルファテストだと描くか描かないかの二択だから、
クロスフェード的な切り替えは出来ないんじゃ?
って意味か>762 書いてて解った。

>760
例によって強制終了。
最初の
_BgDraw Transition

_BgDraw CrossFade
にかえると、
最初のBGを表示するところまで延命するけど文字が出る前に死。

ついでに環境設定も死。

764 名前:名前は開発中のものです。 mailto:sage [2006/10/15(日) 00:35:43 ID:H7M4nsmQ]
>760
ついでに思いつき。
毎回書き換えなくても、
一度ルールアルファを絵に書き込んだのなら、
あとはD3DTSS_ALPHAOPのD3DTOP_ADDとD3DTOP_SUBTRACTで、
頂点カラーの操作だけで出来そうな。

765 名前:691 mailto:sage [2006/10/15(日) 01:06:29 ID:ZmNwMkpc]
一撃死キタ─────(゚皿゚)────────!!!!

もしかしたら LockRect の D3DLOCK_DISCARD が悪さをしてるのかもしれん!
いやきっとそうに違いない!そうだったらいいな
しかし該当する部分で書き換えたのはそこぐらいだものな

D3DLOCK_DISCARD フラグを0にしたテスト版です
例によってログを吐きつつ実行しているので、動作がもっさりするかもしれません
うごけ〜うごぉけぇえ〜
members3.jcom.home.ne.jp/jellyjam/p/novel_test.zip

> D3DTSS_ALPHAOPのD3DTOP_ADDとD3DTOP_SUBTRACT
さっそく調べてみます

766 名前:691 mailto:sage [2006/10/15(日) 02:35:05 ID:ZmNwMkpc]
>>764
SetTextureStageState(0, d3d8.D3DTSS_ALPHAARG1, Dword(D3DTA_TEXTURE));
SetTextureStageState(0, d3d8.D3DTSS_ALPHAARG2, Dword(D3DTA_DIFFUSE));
SetTextureStageState(0, d3d8.D3DTSS_ALPHAOP,   Dword(D3DTOP_ADD));
を設定しつつ頂点色を 0x0〜0xFF へインクリメントしてみた。実行速度は確かに速い!
でも最初にルールのα値をそのまま書き込んじゃうと、白いところが最初から白くなっちゃう(´д`;)
(当たり前だ!)

でもこれ、なんかすごくおしいような気がするぜ
もうちょっと研究してみるか

767 名前:名前は開発中のものです。 mailto:sage [2006/10/15(日) 02:37:25 ID:H7M4nsmQ]
環境設定とトラジ未使用で生存。

1: C:\Work\novel_test\imgs\Bg1.bmp を読み込みました
2: ルール画像 C:\Work\novel_test\imgs\左回り.bmp を読み込みました
3: 背景の描画方法はルール画像によるトランジションが選択されました
4: テクスチャのαチャンネルを塗り潰します...

768 名前:名前は開発中のものです。 mailto:sage [2006/10/15(日) 02:41:11 ID:H7M4nsmQ]
>766
前半はSUBTRACTの255->0で

769 名前:691 mailto:sage [2006/10/15(日) 03:54:36 ID:ZmNwMkpc]
members3.jcom.home.ne.jp/jellyjam/p/novel_test.zip

>>768
でけたー!さいこー
トランジションは直ったかもしれない
ループ内でアンロックしてた・・・
なんでおれのPCはこれで動くんだ? おまえどれだけ頑強なのかと問い詰めたわけだが

環境設定は何がいけないのかわからん・・・
もうちょっと見直しが必要だ

770 名前:691 mailto:sage [2006/10/15(日) 09:18:55 ID:ZmNwMkpc]
みんな落ち着いて聞いてほしい
おれもだいぶ落ち着いてきた

さっき友達からグラボ借りてきてドライバ入れたらWindowsがおかしくなった
そしてOS再起動したら

作 業 し て い た H D D が ぶ っ 壊 れ た

BIOSでも認識しないし電源を入れるとカラカラ音がしてシュゥウウウ・・・っていう
OS入れなおしてみたけどだめだった。なぜかDVD-ROMまで応答しなくなった
なんだこれ
おれがなにをしたっていうんだよ最悪だ
なんでよりによってこのタイミングでこのドライブなんだよ
各種パスワードも2chのログも全部消えたのか
眠くなってきたよパトラッシュ・・・



771 名前:名前は開発中のものです。 mailto:sage [2006/10/15(日) 09:53:53 ID:yU568J+m]
今は、おやすみ

772 名前:名前は開発中のものです。 mailto:sage [2006/10/15(日) 10:19:33 ID:TsWQJW5K]
766,768のやり方は軽くていいんだけどその代わり吉里吉里でいうvague値が使えないから
トランジション用のテクスチャをUSAGE_DYNAMICで作って
CPUでアルファ値を書き換えるってやり方もそのうち試してみてもいいと思うよ

と流れを読まずに下記子

773 名前:名前は開発中のものです。 mailto:sage [2006/10/15(日) 10:51:53 ID:TsWQJW5K]
ついでにSUBTRACTは古いグラボで対応してないのがあった気がするんで
機会があったら調べてみるのもいいかもね

と流r

774 名前:691 mailto:sage [2006/10/15(日) 13:25:52 ID:ZmNwMkpc]
あーもうあったまきた
見てろよこうなったらサーバに残ってたソース使って絶対完成させてやるからな!

ただし明日からな!

>>773
実はおれもその話が気になってた
D3DTSS_ALPHAOPを使ったものと、環境依存のないPascalを使ったものの二種類を用意しておけば問題ないかもな

775 名前:名前は開発中のものです。 mailto:sage [2006/10/15(日) 19:31:36 ID:H7M4nsmQ]
ご愁傷様です。
これに懲りずに頑張れ。

ついでに、これに懲りてバックアップ多めに。

>773
SUBTRACTが駄目でも、MODULATEを使えばそれなりに見せられないかな。

>772
これか。
ttp://devdoc.kikyou.info/tvp/docs/kag3doc/contents/Trans.html
確かに今のやり方だとvagueが最大?で固定されてしまうのかな。
うーん思いつかない。

776 名前:691 mailto:sage [2006/10/17(火) 21:43:49 ID:HTib+2UI]
おいすー

およそ>>760程度にまで復旧できたぜ!
高速スキップ、トランジション、文字色変更、バックログ、ホイール操作、文字キャッシュ検索高速化など。
つーかカスタマイズしたライブラリまで消えちゃって、これを作り直すのに時間を割いたわけだが(´д`;)
まったくおれの集中力と粘り強さには毎度まいど驚嘆させられるよな

とはいえメッセージスキップから復帰すると100%落ちる(!)のでまだうpできねーです・・・
一回作ったんだから何とかなりそうなものだけどなかなかうまくいかないなぁ

>>775
そのページ読んでみたけどvagueって面白いパラメータだね
αを計算するとき、しきい値を考慮すればできるかな?
うーむ、境界がガクガクになりそうな予感・・・

777 名前:691 mailto:sage [2006/10/21(土) 04:53:57 ID:D3IMVVB2]
members3.jcom.home.ne.jp/jellyjam/p/novel14.zip

・ウィンドウ位置を保存できるようにした
・トランジションの実行方法をPascalとDirect3Dの二種類から選べるようにした
・ループ内ループをさらに減らして最適化

負荷ちょっとだけ減りました。スキップ速度はこのくらいあればいいよね?
あー、次は変数と条件分岐か・・・

778 名前:名前は開発中のものです。 mailto:sage [2006/10/21(土) 08:49:29 ID:5+bS6DmJ]
>>691
「指定されたファイルが見つかりません。」ですた……

779 名前:691 mailto:sage [2006/10/21(土) 12:47:23 ID:D3IMVVB2]
>>778
(; ・`д・´)
檄スマソ拡張子間違ってた!
なんかJ-COM垢の機嫌が悪いみたいであっぷろーどできなくなっちゃたから、
ゲムデブにご協力いただくことにしますた
ttp://gamdev.org/up/img/7904.zip

ついでといっちゃあなんだが
タイトルに戻るとき、音を全部消すようにできてなかったので直しといた

780 名前:167 mailto:sage [2006/10/21(土) 20:24:51 ID:veRCNjBt]
御久し振りで御座います(´Д`)
私は現在、プログラマが死後に堕ちるであろうリファクタリング地獄の三丁目に居りますorz
何時終わるのやら………誰かボスケテ(;´Д`)

一応、次回更新時には
・自動改行
・Z座標の実装
・プラグイン仕様の完全実装
を目標に出来たら良いなとか思ってみたりもしないでもないです。



781 名前:名前は開発中のものです。 [2006/10/22(日) 05:29:18 ID:0GnJFT5M]
良スレage

782 名前:名前は開発中のものです。 mailto:sage [2006/10/23(月) 23:15:09 ID:phivSpR5]
>>779
いいですな〜。
軽快に動いてます。
トランジションも良い感じ。
作ってみたいという気になりますた。

783 名前:691 mailto:sage [2006/10/24(火) 06:22:55 ID:z/n6rwSL]
>>782
おお〜ありがとう
感想をいただけると張り合いが出るなぁ
このところ仕事が大変でなかなか進まないけど、今後ともこのスレともどもよろしく願いますよ(←偉そう

if文のオペランドのとり方に少し迷ってるよ
これまでの命令文の書式を踏まえるなら
  _if (Hoge=0), *labelname
ってな感じだろうけど、分岐でラベルジャンプしかできないのはなんかかっこわるいよな
条件式のあとに好きな命令を複数入れられたらいいんだろうけど…
  _if (Hoge=0) then
    _Color $FFFFFF
    _Goto *labelname
  _endif;
とか。
でもこれじゃパーサかコンパイラ作るのと同じじゃねとか思ったりして
あくまで「ノベルツール」の本分を忘れないようにしないといけないよな

784 名前:名前は開発中のものです。 mailto:sage [2006/10/27(金) 10:41:03 ID:c6GTcHI3]
どっちが見やすい・理解しやすいかは
プログラマーとプログラマーでない人では感覚が全然違うかんね
難しいところだね ガンガレ

785 名前:691 mailto:sage [2006/10/29(日) 21:14:45 ID:uPpqMaj3]
あんま進んでねぇーーー

members3.jcom.home.ne.jp/jellyjam/p/novel15.zip

・リンカ(選択肢)のの色を動的に変更できるようにした( !LinkerColor !LinkerEdgeColor )
・タイムウェイト( !TW )の挙動を直した

以前からタイムウェイトの挙動が気になってたんでこの際直しといた
ちなみに0〜255までの数値を指定できるぜよ
今回もエラーチェックは甘めなので、添付のソース書き換えるにしても
変な座標とか数値とか指定すると簡単に落ちると思ふ


条件分岐? なにそれ( ´∀`)
条件式で凝ったことやろうと思うとけっこう大変なんだこれが

786 名前:名前は開発中のものです。 mailto:sage [2006/10/31(火) 22:38:08 ID:sRR/DbRF]
空気読まずスマソm(__)m

スキャナー選びでもの凄い悩んでんだけどお勧めのスキャナーない?

787 名前:名前は開発中のものです。 mailto:sage [2006/11/01(水) 18:27:31 ID:VwaCyLKm]
スキャナはA4までだと辛いよ

788 名前:名前は開発中のものです。 mailto:sage [2006/11/01(水) 18:59:30 ID:hxUT5DqW]
ってことは結構高め?

789 名前:名前は開発中のものです。 mailto:sage [2006/11/01(水) 22:07:04 ID:p3enbp+j]
>>785
おまえ元クロヒツジもとい元マグロ漁船のぬだろwwwwwwwwwwwwwwwww

790 名前:691 mailto:sage [2006/11/01(水) 22:16:11 ID:xDE8tosI]
いまのとこ
・ゲーム中、テキストの表示・非表示を切り替えることができるようにした
・文字列型 と 32bit符号付数値型 、真偽値型の変数を使えるようにした

うpはもう少し煮詰めてからにしよう。

変数の宣言・代入について。
現状、代入は即値のみ・オペランドによって変数の型を自動的に判断するようになってる。
例えば
  !var hoge, 255 //これは数値型
  !var hoge, -255 //これも数値型
  !var hoge, 'UNKO' //これは文字列型
  !var hoge, True //これは真偽値型
とか。今後都合が悪くなるようなら仕様変更もありえるな。(←無計画すぎ!
ちなみに数値型はオーバーフロー・アンダーフローが起きないように注意して使うのが必須条件さね。
考えることが多くてそこまで面倒見切れん。

if文の条件式、即値ならすぐできるんだけどなぁ
  !if (Hoge<255) //これなら簡単
  !if (Hoge<255) and ((not Hage) or Unko) xor (Hige='ABCDE') //こんなのどうやったらいのか・・・
逆ポーランド法とか応用したらできるかなぁ

以上、現状報告でした!



791 名前:691 mailto:sage [2006/11/01(水) 22:24:45 ID:xDE8tosI]
>>789
( `∀´)ケケケなんのことやら
おいらはただの数字コテですぜ

792 名前:名前は開発中のものです。 [2006/11/01(水) 23:27:39 ID:3J8+zwro]
>790
!if( Foo<>0 ) and ( 1000/Foo

793 名前:名前は開発中のものです。 mailto:sage [2006/11/01(水) 23:28:49 ID:3J8+zwro]
書きかけで送ってしまった。

>790
!if( Foo<>0 ) and ( 1000/Foo > 5 ) then...
とかだとRPNだとアカンよ、

794 名前:691 mailto:sage [2006/11/02(木) 22:13:42 ID:Dhql3Jxs]
>>793
むむ? なんでなんで? kwsk
divide by 0 とかは関係ないよね

795 名前:名前は開発中のものです。 mailto:sage [2006/11/02(木) 23:08:39 ID:C7j+kj57]
そのとおり、0除算が出るから。
常識的にはFooが0の時には( Foo<>0 )が成立しないので後が何であろうとも全体として不成立になるはず。
しかし、RPN処理の場合は正格評価になるので( 1000/Foo > 5 )を必ず評価してしまうことになる。
(Foo 0 <> 1000 Foo / 5 > and あたりになるかな?)
これは望ましい状態とは言いがたい。
なお、notとxorは正格評価で問題ない。


796 名前:167 mailto:sage [2006/11/03(金) 10:28:34 ID:MzOzsI/Z]
>795
横レスですが、成る程、参考になります(´Д`)
とはいえ、RPNの便利さは捨てられませんが………orz

797 名前:名前は開発中のものです。 mailto:sage [2006/11/03(金) 11:49:55 ID:GIcTFPfW]
おまけ:いくつかのスクリプト/プログラミング言語でのANDの評価(ORも同様)。

C/C++   &&    短絡 *1
java    &&    短絡
VB     And    正格
       AndAlso  短絡
delphi   and    短絡
scheme  and    短絡
perl    &&,and  短絡
TJS2     &&    短絡
NScripter *2

*1 C++で演算子オーバロードした時は正格
*2 なし:式を扱えない

798 名前:691 mailto:sage [2006/11/03(金) 20:02:48 ID:LiNNIOVd]
>>795
すごくよくわかった。795タンは物知りだなぁ(*´∀`*)
それと>>797を見る限り、短絡評価のほうが誤解がなくてよさそうだね
うーん、どうしたらいいんだろう

  (a) Foo 0 <> 1000 Foo / 5 > and
  (a-1) Foo 0 <>
  (a-2) 1000 Foo / 5 >
  (a-3) <a-1> <a-2> and

(a)をこういうブロックに大別して…、普通に上から順に式を評価していくだろ?
評価の過程で divide by 0 が出そうだと判明したら、
実際の計算はせず、「そのままだとエラーが出そうだ」という情報だけを記憶しておく。
んで(a-3)にきたら、まず<a-1>をみて、偽なら<a-2>の評価は無視して全体の評価として「偽」を返す。
<a-1>が真の場合、続いて<a-2>の評価を見るわけだが、「エラーが出そうだ情報」を記憶しているときは
これ以上続けるわけにもいかんので、これまでの作業をすべて放擲して if 文を抜ける、とか。

なんだ・・・おれは何を書いているんだ?わけわかんなくなってきt


ここまで↓作ってはしゃいでたら(-2*-5)とかの単項演算子が使えないことに気づいたorz
members3.jcom.home.ne.jp/jellyjam/img/RPN.png
付け足していくより最初からやり直したほうがはやそうだ…
また明日か…

799 名前:名前は開発中のものです。 mailto:sage [2006/11/03(金) 20:44:41 ID:GIcTFPfW]
>798
こんなんはどう? RPN作る/処理するのが面倒になるけど。

A and B
 A #dup not #ifskip<N> #pop B #marker<N>
A or B
 A #dup #ifskip<N> #pop B #marker<N>

#dup スタックの一番上を複製する
#pop スタックの一番上を捨てる
#ifskip<N> スタックの一番上を取り出し、
trueなら#marker<N>まで読み飛ばす
 falseならそのまま続行
#marker<N> 読み飛ばされる
※入れ子になる場合があるのでNが重複しないよう気をつけること。

A and B and C
 A #dup not #ifskip<N1> #pop B #dup not #ifskip<N2> #pop C #marker<N2> #marker<N1>
( Foo<>0 ) and ( 1000/Foo > 5 )
 Foo 0 <> #dup not #ifskip<0> #pop 1000 Foo / 5 > #marker<0>

三項演算子もできるかな
A?B:C
A #ifskip<N1> C #ifskip<N2> #marker<N1> B #marker<N2>

800 名前:名前は開発中のものです。 mailto:sage [2006/11/03(金) 22:23:23 ID:GIcTFPfW]
>798
> members3.jcom.home.ne.jp/jellyjam/img/RPN.png
(25*Hage/24)が 25 Hage 24 / *、つまり/が*より優先になってる(or 右結合になってる)けどOKなの?



801 名前:167 mailto:sage [2006/11/03(金) 23:12:17 ID:MzOzsI/Z]
複雑なRPNですね一度基盤を(自力で)作り上げたのに、今から組み直すのはぞっとします(;´Д`)
とりあえず、今はVer1.0を目指して頑張っていこうかなと。作業が八割方終了したので、近々新Ver出せそうです(´Д`)

802 名前:名前は開発中のものです。 mailto:sage [2006/11/03(金) 23:15:24 ID:LErpqGYA]
【スクリプトをちょっと紹介させてください】
アドベンチャーゲーム用スクリプトシステム「MICoスクリプト」を開発しました。
軽いこと&商用ゲームでの使用可能な高性能を目指して設計しており
複雑な演出も簡単に作れるシステムです。
詳しい紹介は公開サイトにありますので、よろしければ使ってみてください。

公開サイト
ttp://mico.x0.com


803 名前:名前は開発中のものです。 mailto:sage [2006/11/03(金) 23:37:17 ID:pcqCA54V]
ダウンロードできません

804 名前:名前は開発中のものです。 mailto:sage [2006/11/04(土) 00:20:08 ID:s0zwtZjj]
URLに¥をつけるなんて、相当●●だなぁ。大丈夫か?>>802

ttp://mico.x0.com/files/MICo100c.zip
ttp://mico.x0.com/files/Sample01.zip


805 名前:名前は開発中のものです。 mailto:sage [2006/11/04(土) 12:59:51 ID:zX4Hlg4d]
ぬはDelphiなんだよな。のらだいこさんとこのやつは見たのか?

806 名前:名前は開発中のものです。 mailto:sage [2006/11/04(土) 14:03:18 ID:uWIJc3Ba]
のらだいこ本人乙。

807 名前:名前は開発中のものです。 mailto:sage [2006/11/04(土) 20:39:01 ID:zX4Hlg4d]
俺は違うぜwwwwwww通りすがりのVIPPERwwwwwwwww

808 名前:名前は開発中のものです。 mailto:sage [2006/11/05(日) 14:24:28 ID:bBy3ooVM]
再び空気読まずスマソ

ペンタって何インチぐらいがいい?

809 名前:691 mailto:sage [2006/11/06(月) 06:03:55 ID:/PkNNPJx]
オハヨー

members3.jcom.home.ne.jp/jellyjam/p/parser.zip

ここ↓のを参考にして、Delphi に移植してみた。これはすごい!
ttp://www.h4.dion.ne.jp/~zero1341/winback2.htm

実際の計算は行わず、中置記法を逆ポーランド記法に返還するだけのものだ。
↑に倣って、式が変だったりするとエラーを出力するようになってるはず。
ちなみに演算子の優先順位は以下の通り。Delphi と一緒やね。
優先順位は括弧を使って変更できるよ。

1 位(最高)   not,-(単項演算子、RPN 上では neg に変換される)
2 位             *,/,mod,and
3 位             +,-,or,xor
4 位(最低)   =,<>,<,>,<=,>=

しかし式が複雑になるほど変換するコストが気になるなぁ
果たしてループ内でストレスなく機能してくれるだろうか?
インタプリタの限界はどこだ。

810 名前:691 mailto:sage [2006/11/06(月) 06:47:54 ID:/PkNNPJx]
>>799
んー、難しい! 
これ、not はどこに掛かってるの?
だめだ、仕事終わってからまた考えよう。
>>800
あと右結合、直ってると思いますぜよ

>>801
ガンガレ。超ガンガレ

>>805
情報thxですよ。こんな便利なものがあるとは知らなかった。
んでも、今やってることってそれほど難しいことじゃないから、まずは自分で作ってみたいんだよね。
などと大見栄を切ってみるテスト。もう後には引けないぜ?

>>808
わかんないけど33インチぐらいでいいんじゃね
ttp://www.pentaputter.com/products/index.html



811 名前:名前は開発中のものです。 [2006/11/06(月) 07:07:41 ID:WD4G+Tat]
>810
A and B → A #dup not #ifskip<N> #pop B #marker<N>
を例にする(A,Bは真偽値を返すRPN式)。
[]はスタック状態(左がスタックトップ)、
//以降はコメント。

●Aがtrueの時
[]
 A #dup not #ifskip<N> #pop B #marker<N>
[true]
 #dup not #ifskip<N> #pop B #marker<N>
[true,true]
 not #ifskip<N> #pop B #marker<N>
[false,true]
 #ifskip<N> #pop B #marker<N> //偽だったので読み飛ばしは無し
[true]
 #pop B #marker<N> //結果はBのみで決まるのでAは要らない
[]
 B #marker<N>
[B]
 #marker<N> //マーカは読み飛ばす
[B]
 (END)

812 名前:続き mailto:sage [2006/11/06(月) 07:08:58 ID:WD4G+Tat]
●Aがfalseの時
[]
 A #dup not #ifskip<N> #pop B #marker<N>
[false]
 #dup not #ifskip<N> #pop B #marker<N>
[false,false]
 not #ifskip<N> #pop B #marker<N>
[true,false]
 #ifskip<N> #pop B #marker<N> //真なので対応するマーカまで読み飛ばす
[false]
 (END)

813 名前:167 mailto:sage [2006/11/09(木) 10:39:11 ID:FF84JFMS]
ほしゅ(´Д`)
ソースコードの変更は既に終わったのですが、パフォーマンスが極端に落ちてますorz
なので、プロファイラを入れてあっちこっちを弄る日々………誰かボスケテorz

814 名前:167 mailto:sage [2006/11/09(木) 13:36:01 ID:FF84JFMS]
誰か見ている事を期待しつつ。何とか、パフォーマンスが極度に落ちている部分を発見しました(´Д`)
ですが、何故落ちているのかが理解出来ず………誰か説明出来ますか?orz

if((m_Log_Text.at(m_It)>=(char)0x81 && m_Log_Text.at(m_It)<=(char)0x9F) || (m_Log_Text.at(m_It)>=(char)0xE0 && m_Log_Text.at(m_It)<=(char)0xFF)){
m_It += 2;
}




if((m_Log_Text.at(m_It)>=0x81 && m_Log_Text.at(m_It)<=0x9F) || (m_Log_Text.at(m_It)>=0xE0 && m_Log_Text.at(m_It)<=0xFF)){
m_It += 2;
}

と変えるとパフォーマンスが急激に悪化します、ただのキャストの有無だけなのに何故なのでしょう(´Д`)

815 名前:名前は開発中のものです。 mailto:sage [2006/11/09(木) 14:38:01 ID:zlLv3Pnq]
みてるよノシ
けどサパーリワカラン

816 名前:名前は開発中のものです。 mailto:sage [2006/11/09(木) 14:53:50 ID:+EWAYAdH]
>814 increase warning level of your compiler!

817 名前:名前は開発中のものです。 mailto:sage [2006/11/09(木) 15:17:42 ID:z1ieNEFL]
パフォーマンスはさておき、一時変数作れよ
比較式を見直せよ

unsigned char hoge = static_cast<unsigned char>(m_Log_Text.at(m_It));
if( !(hoge < 0xA0 && hoge > 0xDF) ){}

818 名前:167 mailto:sage [2006/11/09(木) 20:25:13 ID:FF84JFMS]
基本的に、そこでしか.atは使っていないのでたった4つの命令で一時変数を作るのもどうかと思い(´Д`)
あと、直感的ではない比較式は極力使わないようにしています。オープンソースを前提に制作していますので('='

819 名前:名前は開発中のものです。 mailto:sage [2006/11/09(木) 20:37:44 ID:+EWAYAdH]
多分そのif文には
 else ++m_It;
が続くと思うけど、テーブル作っておけばいいんじゃね。
 m_It += TABLE[m_Log_Text.at(m_It)+OFFSET];

 m_It += TABLE[m_Log_Text.at(m_It)&MASK];
みたいな感じで。

820 名前:167 mailto:sage [2006/11/09(木) 21:10:31 ID:FF84JFMS]
>816
何か、警告が出るという事でしょうか?
>817
呼び出し頻度が高くない部分なので、テーブルにするまでもないかと。
三角関数みたいな複雑かつ演算に時間を要するものでしたらテーブルを作った方が良いかもしれませんが、
上記のは比較的単純な比較式で出来ますし。テーブルを作る分だけ、余計にキャッシュを圧迫しそうです(´Д`)



821 名前:名前は開発中のものです。 mailto:sage [2006/11/09(木) 21:53:59 ID:+EWAYAdH]
適当に補ってその部分だけコンパイルしたら
 a.cc:14: warning: comparison is always false due to limited range of data type
 a.cc:14: warning: comparison is always true due to limited range of data type
 a.cc:15: warning: comparison is always false due to limited range of data type
 a.cc:15: warning: comparison is always true due to limited range of data type
とか。


> 呼び出し頻度が高くない部分なので、
ならそもそもボトルネックにならないはず。

> テーブルを作る分だけ、余計にキャッシュを圧迫しそうです
が、分岐は排除できるぞ。

822 名前:167 mailto:sage [2006/11/09(木) 22:37:42 ID:FF84JFMS]
>821
う〜ん、適当に補ったからだと思われますです。
/Src/AbyssLib/Command/Cmd_text.cpp内に、具体的なソースはあります(´Д`)

全体としての呼び出し頻度は高くないのですよ、ぶっちゃけスクリプトのtext命令が実行されている間にしか使われません。
だからこそ、何でこんなところが重くなるのか疑問なワケで………(;´Д`)

あと、単純な分岐条件なだけにテーブル作るまでも無いかなと。

823 名前:名前は開発中のものです。 mailto:sage [2006/11/09(木) 23:07:47 ID:oeKHxQcL]
/Src/AbyssLib/Command/Cmd_text.cpp内、とか言われても、そのソースはどこだよ

824 名前:167 mailto:sage [2006/11/09(木) 23:30:24 ID:FF84JFMS]
abyss-21.hp.infoseek.co.jp/Release.zipです、すっかり貼り忘れてました(´Д`)
最新Verではなく、ひとつ手前ではありますが………。

825 名前:名前は開発中のものです。 mailto:sage [2006/11/09(木) 23:35:47 ID:oeKHxQcL]
落とせないし、そもそもabyss-21.hp.infoseek.co.jp/にもアクセスできないが?

826 名前:167 mailto:sage [2006/11/09(木) 23:37:39 ID:FF84JFMS]
確認しました、どうやらinfoseekが落ちている様ですね。
先日も落ちてましたし、落ち易いのかもしれません(´Д`)

827 名前:名前は開発中のものです。 mailto:sage [2006/11/10(金) 13:48:20 ID:n/BNIL0m]
>基本的に、そこでしか.atは使っていないのでたった4つの命令で一時変数を作るのもどうかと思い(´Д`)
>あと、直感的ではない比較式は極力使わないようにしています。オープンソースを前提に制作していますので('='

>三角関数みたいな複雑かつ演算に時間を要するものでしたらテーブルを作った方が良いかもしれませんが、
>上記のは比較的単純な比較式で出来ますし。テーブルを作る分だけ、余計にキャッシュを圧迫しそうです(´Д`)

>あと、単純な分岐条件なだけにテーブル作るまでも無いかなと。

やれやれ
こんな調子じゃ>>814の疑問に回答したとしても理解できるとは思えんな

828 名前:167 mailto:sage [2006/11/10(金) 18:55:58 ID:5S9vD1uX]
>827
理解出来るかどうかは分かりませんが、回答出来るのでしたらお願い出来ればと('='

829 名前:名前は開発中のものです。 mailto:sage [2006/11/10(金) 19:55:35 ID:jEDzoqtR]
if((m_Log_Text.at(m_It)>=(char)0x81 && m_Log_Text.at(m_It)<=(char)0x9F) || (m_Log_Text.at(m_It)>=(char)0xE0 && m_Log_Text.at(m_It)<=(char)0xFF)){
m_It += 2;
}




if((m_Log_Text.at(m_It)>=0x81 && m_Log_Text.at(m_It)<=0x9F) || (m_Log_Text.at(m_It)>=0xE0 && m_Log_Text.at(m_It)<=0xFF)){
m_It += 2;
}

は、意味が、結果が異なってるってのは分かってる?

830 名前:名前は開発中のものです。 mailto:sage [2006/11/10(金) 20:30:11 ID:5S9vD1uX]
上は右辺がchar型にキャストされるので比較時に左辺の返り値はそのまま、
下は右辺がint型なので比較時に左辺の返り値がintにキャストされる、でしょうか?
多分そうだとは思うのですが、確証は持てません(汗



831 名前:167 mailto:sage [2006/11/10(金) 20:37:23 ID:5S9vD1uX]
↑は167でした(汗

832 名前:名前は開発中のものです。 mailto:sage [2006/11/10(金) 20:41:34 ID:jEDzoqtR]
何言ってるのかよくわからんが、違う。
char + charはint型を返す。そんなことじゃない。

0x81は正の整数で、(char)0x81は負の整数だ。
WindowsのVCはcharは符号付の型だからな。

でm_Log_Textはstring型で、at()の戻り値はchar型だ。つまり下の
>m_Log_Text.at(m_It)>=0x81
は必ずfalseになる。charは128以上を表せない。

よって、中途半端なマルチバイトが出来上がるわけだ。
これが表示されなかったり、生成が遅かったりすると、処理落ちしたように見える。

つまり、その式が遅いわけではない。

何がプロファイルとった、だよ。嘘付くな。取ってないだろ。

833 名前:167 mailto:sage [2006/11/10(金) 21:08:21 ID:5S9vD1uX]
成る程、理解出来ました。有難う御座いますm(_ _)m

>何がプロファイルとった、だよ。嘘付くな。取ってないだろ。
嘘じゃあないですよ、実際とりましたがプロファイラでは分からなかったので、
原因が上記の部分だと断定するのに変更前と変更後のソースを比較してチェックしていました。
プロファイラの結果を役立てて断定したのかと問われれば、確かにそうではありませんが(´Д`)

ともあれ、重ね重ね有難う御座います。

834 名前:名前は開発中のものです。 mailto:sage [2006/11/10(金) 21:40:30 ID:nTN0QHiT]
なぜか科学者とノミのジョークを思い出した

835 名前:名前は開発中のものです。 mailto:sage [2006/11/11(土) 02:03:37 ID:fPVPryGm]
なんだかんだ言っても、やることをやる>>832に漢気を感じた。
ガンガレ!!>>167

836 名前:691 mailto:sage [2006/11/11(土) 22:58:51 ID:Y1RZBpHm]
おっすおら>>691
ほぼ一週間ぶりのプログラミング。
なんで人間は好きなことだけをして生きていけないんだぜ?


ごちゃごちゃやってみた結果、ようやく変数への式の代入ができるようになった( ゜д゜)
これで if 文に取り掛かれるぜ
懸念してたパーサの動作速度はあんまり気にならなさそうなので安心した

>>811-812
ありがとう!超よくわかっただぜ
このPRNを作るのはそんなに手間じゃなさそうなので近近にはできると思うよ

837 名前:691 mailto:sage [2006/11/14(火) 05:58:13 ID:CtgyW8K3]
members3.jcom.home.ne.jp/jellyjam/p/novel16.zip

・ゲーム中、右ボタンクリックやスペース押下でテキストの表示・非表示を切り替えることができるようにした
・スクリプト記述でインデントできるようになった(半角スペースまたはTAB)
・変数を使えるようになった
・命令の引数に変数を仕込めるようになった
・システム定数を定義した(True/Falseやトランジションとかに使うやつなどなど)
・!if、 !else、 !endif の実装

これまでのように変数名や命令名は大文字小文字を判断しません。

>>790で書いた通り、変数の型は第二引数によって自動的に判断されます。
  !var hoge, 255 //これは数値型 
  !var hige, 'UNKO' //これは文字列型 
  !var hage, True //これは真偽値型 
  !var UNKO, hoge+100 //これは「数値型変数+数値」なので数値型

なお演算は型が同じもの同士でないと行えません。
こんなのはだめ。
  !var hige, 'UNKO' //higeは文字列型 
  !var hage, True //hage真偽値型 
  !var hoge, hige+hage //「文字列型+真偽値型 」なのでシンタックスエラー。この行は無かったことに

いろいろ考えたのですが、数値に対しては論理演算は行えないようにしました。
  !var hoge, "$0000FFFF or $FFFF0000" //こんなのはだめ
こんなのあっても使わんと思うし。

838 名前:691 mailto:sage [2006/11/14(火) 06:03:12 ID:CtgyW8K3]
んで、今回の更新分でこんなことができるようになった。

!var Hoge, true
!var hige, true
//スペースを含む式はダブルクォートで囲んでやってくだちぃ
//そのうち、そんなことしなくていいように直すと思うだぜ
!if "hoge and hige"
    あいうえお
    !TextDraw
    !cw
    //if文をネストさせてみる
    !if False
        かきくけこ
        !TextDraw
        !cw
    !else
        さしすせそ
        !TextDraw
        !cw
    !endif
!else
    たちつてと
    !TextDraw
    !cw
!endif

これを実行すると
「あいうえお(クリック)さしすせそ(クリック)」
と表示される…、はず。

839 名前:691 mailto:sage [2006/11/14(火) 06:12:43 ID:CtgyW8K3]
っと
今ふと思いついたが、!if 文の中で !goto とか !Linker が呼ばれたらifのネストが無茶苦茶になるな
うわどうしよう、これは困ったぞ

840 名前:名前は開発中のものです。 mailto:sage [2006/11/14(火) 09:52:42 ID:Gp2dNbIi]
>837
*start

!if "1/0=2"
ほにゃらら
!else
ふにょらら
!endif
!TextDraw
!cw

!if "false and ( true and 1/0 )"
へにゃらら
!else
ひにょらら
!endif
!TextDraw
!cw



841 名前:名前は開発中のものです。 mailto:sage [2006/11/14(火) 09:57:23 ID:Gp2dNbIi]
おっと、true/falseは先頭大文字。結果は変わらんけど。

842 名前:691 mailto:sage [2006/11/14(火) 13:57:56 ID:CtgyW8K3]
( ゚д゚) <ムシャムシャ

>>840
テストしてくれてありがとう!

!if "1/0=2" //ここで0除算エラーでてます。この行は無かったことにされる・・・
    ほにゃらら 
!else 
    ふにょらら 
!endif 
!TextDraw 
!cw 

!if "false and ( true and 1/0 )" //げ本当だ
    へにゃらら 
!else 
    ひにょらら 
!endif 
!TextDraw 
!cw 

二番目のほうは問答無用でFalseを返さなくちゃいけないのにな。
マーカーの挿入方法がおかしいのかも。帰ったら見直してみる。
つーかこの程度の不具合、開発段階で気づけよって話ですが。やはりおれは一度首吊る必要があると思う。

あと、評価の途中でなんらかのエラーが出たら、対応する !endif までジャンプさせないとだめだな。
っていうか、これもできていて当然の動作なんだよなー(;´Д`)






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<301KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef