HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
1003
りさサウンドノベル34解決


りさ

リンク

2006/10/3(Tue) 18:19:38|NO.2831

こんにちわ、りさ(理沙)です☆

最近、ノベル型アドベンチャーに触れたので、
あたしの持ってる知識を提供しようと思います。
(サウンドノベルを作ってるので)
っていうか、それくらいしかできないので・・・

HSPの標準命令だけで作っています♪

<画像>
レイヤー機能等が存在しない為、全てを仮想画面で補います。

’愀
 背景の為には2枚の画像を用意します
 フェードイン・フェードアウトで使用します
 但しその内の1枚は一時的なバッファでOKです
∩扱
 前景にはBMPを読み込む1枚あれば充分です
 透過色は固定した色(例えば0xFF00FFなど)を使用します

注意点としては、背景の数だけbuffer で用意すると、
とんでもない量になるので、随時、読み込む必要があるということです。
640x480の普通のサイズでは、読み込み時間は感じられません。

<音楽>
これはmm系命令だけでは不十分なので、mci命令を使います。
特に9x系マシンでは、mm系命令は正常に動作しない可能性が
あることが分かっています(経験上)。

同じく、随時、読み込みます。

<文章>
一番重要なのは、「外部ファイルを使用する」ということです。
これにより再開発が避けられます。

外部ファイルはテキストファイルで充分です。

(絃呂鯑匹濆み、表示する。
 一応、付属のhsp3util.asでも構わないので、
 一文字ずつ表示できるようにします。

 外部ファイルを読み込み、一つの大きな変数に代入します。
 getstr命令で一行一行読み込みます。
 note系命令の方がいいかと。ただ個人的にnote系がキライなので(笑

▲▲ションを表示する。
 改段落のクリック待ちや、改頁のクリック待ち、
 背景変更や前景変更、BGM変更や効果音再生、
 その他のイベント等には、特殊記号を使用します。

// ---------- テキストファイル ---------- //

これは最初のページです。
-pr
簡単な例です。
-pr
特殊記号を採用すると、
イベントを発生させることができます。
+pg
次のページです。

// -------------------------------------- //


// 動かないサンプル sdim scenario, 96000 bload "scenario.txt", scenario n = 0 // カウンタ page = 0 // ページ数 tmp = "" // 記号用 string = "" // 表示文字 *main // 一行読み込む getstr string, scenario, n n += strsize // 表示文字なら表示 tmp = strmid( string, 0, 1 ) if ( tmp =! "-" ) & ( tmp =! "+" ) { emes string page++ goto *main } // 3文字取り出す tmp = strmid( string, 0, 3 ) // 場合わけ switch ( tmp ) case "-pr" // 改行 // クリック待ち mes swbreak case "+pg" // 改頁 // クリック待ち cls page++ swbreak case "ms" // 音楽再生 swbreak // その他の処理 default swbreak swend goto *main

ページは、"+"の数を数えます。
途中からロードするときは、このmainの前に、
ページ数だけ"+"の行を読み込んで、n の値をセットします。

背景は例えば"-bg001.jpg"などとして、001.jpg を読み込みます。
ページの途中で変更すると表示文字が消えてしまうので、
再描画するための、「現在ページ文字」を記録する必要があります。

色々付け加えることで、機能も充実してくることと思います・・・

なにか謎な点とかあったら、聞いてください。
少しでも参考になれば嬉しいです☆

(もっといい方法があるかもデス。むしろ教えてください(笑))



この記事に返信する


男性A

リンク

2006/10/4(Wed) 16:25:25|NO.2848

実際に作ってみて思ったことですが、外部ファイルは
次のような感じでいくつか作っておくと便利でしたよ。
あくまでも個人の意見ですけどね。

シナリオデータ:文章とコマンドを記述。xmlのような
        形式だと処理し易い

定義ファイル :例えばシナリオで主人公を[MAIN]と記
        述して、実行するときにこのファイル
        に従って"[MAIN]→太郎"みたいに一括
        変換できるようにすると、後で楽
        あと、エラーメッセージとかを纏めて
        おいてもいいかも

レイアウト  :CSSみたいに予め何処に何をおくかを
        まとめておく。
        例えば<IMG src="xxx" class="LEFT">
        と書けば、class="left"の絵は全て
        左側に表示させるといった感じ。
        ゲーム中で会話シーンと戦闘シーンや
        装備画面などを作る時に便利。
        あと、一度エンジンをつくれば、レイ
        アウトの定義を変えるだけでさまざま
        な雰囲気のゲームも作れます。

多分何人かで開発する時なんかに便利なんじゃないでしょうか?



りさ

リンク

2006/10/4(Wed) 17:48:35|NO.2850

男性Aさん、ありがとうございます。

>例えばシナリオで主人公を[MAIN]と記述して、

形式によりますが、確かに便利そうですね☆

注意点としては、もし表示する文字数が固定の場合
(例えば、常に15文字で改行している場合、など)
は、採用できないということですね(^^;

>CSSみたいに予め何処に何をおくかをまとめておく。

これは処理が少し難しそうですが、
エンジンさえ組めれば非常に便利ですね☆

解析方法で何かいい方法をご存知でしたら、
教えて貰えませんでしょうか(^^?

>戦闘シーンや装備画面など
が必要なアドベンチャーゲームならば、この方がいいのかもしれません。

あたしは単純なノベルしか製作したことがないのですが、
ノベルのみならば、

-bg=city1.jpg
          (5文字以降のファイル名を背景として表示)
-fg=2,0,9
          (左,中,右の前景番号を表示)

程度で充分で、解析は一切必要ありませんでした(笑)

戦闘とかは結構難しそうですね。
確かにこれだけじゃ、全然足りませんね・・・

それから、もしエンジン開発者とゲームシナリオ製作者が別ならば、
分かり易い記号(?)を採用しなくてはなりませんね・・・。

>一度エンジンをつくれば、
>レイアウトの定義を変えるだけでさまざまな雰囲気のゲームも作れます。

これは同感です♪

ようするに、アドベンチャーの開発というのは、正確には
「アドベンチャーエンジンの開発」に他ならないですよね☆

>多分何人かで開発する時なんかに便利なんじゃないでしょうか?

便利ですね☆
前述した内容も含め、それぞれの素材(シナリオ・画像・音楽など)を
別々に担当する場合や、本体プログラムを部品に分けて開発する時などに
効果を発揮できそうです(^^

#

ですが、この「アドベンチャーエンジン」を開発したとしても、
エンジンとして公開することはできなそうです。

する場合は、オープンソースに近い形になってしまいますよね(^^;

EXE化して、常に外部ファイルを読み込んで再生するような機能だと、
それ全体をEXE化できないですし・・・

結局はエンジンのスクリプトを提供して、
外部ファイルと合わせてEXE化してもらうしか方法はないのでしょうか・・?

(作ったサウンドノベルのエンジンを載せてもいいんですが、
 どうしてもコードが長くなってしまうので無理っぽいです(笑))



男性A

リンク

2006/10/4(Wed) 20:48:57|NO.2852

>注意点としては、もし表示する文字数が固定の場合
>(例えば、常に15文字で改行している場合、など)
>は、採用できないということですね(^^;

例えば[MAIN]なら文中の"["を見つけてそれ以降の文字
をpeekなどで一文字ずつ取得していきます。"]"がきた
ところで取得をやめればその間の文字数がいくらでも
大丈夫ですよ。


>これは処理が少し難しそうですが、
>エンジンさえ組めれば非常に便利ですね☆

例えばですが
MESSAGEBOX{ pos="100,100"; size="100,20";}
という定義の場合、まず"MESSAGEBOX"を見つけます
次に{}で囲まれた文字列を抜き出し、posやsizeなど
の次の=""に囲まれた文字列を取得していきます。
説明下手でごめんなさい。


>それから、もしエンジン開発者とゲームシナリオ製作者が別ならば、
>分かり易い記号(?)を採用しなくてはなりませんね・・・。

同感です。分かり易いと言う点では、知っている人の多いHTMLを
ベースにするといいかもしれません。
例えば
<mes>こんにちは</mes>
<bgm>xxxxx.midi</bgm>
などと書けば、多くの人は理解できるはずですし。


>ですが、この「アドベンチャーエンジン」を開発したとしても、
>エンジンとして公開することはできなそうです。

市販ゲームやRPGツクール製のゲームを見ると分かりますが、
本体とは別にデータフォルダを用意して、その中に外部ファイル
をまとめているのはよくあることですよ。
大規模なゲームだと、後でバグが見つかった時に修正したいファイル
だけをユーザーが置き換えてくれるようにできるし、機能の追加なんか
もできますしね。
スクリプトファイルを暗号化して、実行時にエンジンが解読するように
すれば改竄も(簡易ですが)防げます。
専用のエディタを作りファイル保存時に暗号化するようにしておけば
エンジンとして配布しても大丈夫です。



GENKI

リンク

2006/10/4(Wed) 22:10:44|NO.2853

昔こんなの作りました。
http://homepage3.nifty.com/ghpk/dl/dl02.htm
シナリオファイルの解析エンジンつくるのめんどうくさかったなぁ…
今思うと二度と作りたくないです…、誰かHSP用の汎用エンジン作ってくれないかな…だめか。w


> 本体とは別にデータフォルダを用意して、その中に外部ファイル
> をまとめているのはよくあることですよ。

 私はこの方法です。
そのまんまだと見られちゃうので、シナリオファイルの暗号化は当然やりました。
画像ファイルもヘッダだけ書き換えて簡単には見れなくしてました。

 HSPで作ったexeファイルに後からシナリオファイルをくっつけ、1個の
ファイルにまとめてしまうという方法があるらしいのですが…
私には実現できなかったのを覚えています。
この方法、HSP2で実際にやられている方も当時おられたのですが…
どのサイトだったか完全に忘れてしまいました。



> する場合は、オープンソースに近い形になってしまいますよね(^^;

 私の場合は違う理由でオープンしてます。
気が向いたら見てください。汚いですが。w



りさ

リンク

2006/10/5(Thu) 05:55:24|NO.2855

>例えば[MAIN]なら文中の"["を見つけてそれ以降の文字
>をpeekなどで一文字ずつ取得していきます。"]"がきた
>ところで取得をやめればその間の文字数がいくらでも大丈夫ですよ。

実はあたし、この仕様にするかどうか、迷いました(゜o ゜@
例えば「5文字=画面の横幅」だとして、自動改行の場合

  昨日は雨が、降りました。     ↓   昨日は雨が   、降りまし   た。
等となってしまったりするので、
改行はシナリオファイル内で作者が手動で行うようにしました。

なので、もし自動改行の場合は、

  [MAIN]は、今年で二十歳です。     ↓   りさは、今   年で二十歳   です。   [MAIN]は、今年で二十歳です。     ↓   リサリサは   、今年で二   十歳です。
等とならないように、改行の為の解析もしなければならない筈です(^^;

>昔こんなの作りました。

>気が向いたら見てください。

GENKIさんの「PSBS」は、何回か参考にさせて頂いた記憶がありますm<(_ _)>m
カワイイですよね。黒猫がコワイけど(笑
ここに出てくる、

名前    「こんにちわ」
のような書式であれば、[MAIN]を置き換えても問題なさそうですね☆

>説明下手でごめんなさい。

そんなことないです。
ようするに、しっかりと解析しなさい、ってことですよね(笑
一語一語を読み出していって、それに対応した処理を行えばいいんですね☆
(peekで読み出して解析なら、結構処理が早いかもですね)

>スクリプトファイルを暗号化して、実行時にエンジンが解読するように
>すれば改竄も(簡易ですが)防げます。
>専用のエディタを作りファイル保存時に暗号化するようにしておけば
>エンジンとして配布しても大丈夫です。

>HSPで作ったexeファイルに後からシナリオファイルをくっつけ、1個の
>ファイルにまとめてしまうという方法があるらしいのですが…

色々方法があるんですね。ありがとうございます。

ただ、実装するのはかなりハード・・・な気が・・(><
GENKIさんの方法も、少し調べてみます。
それからでも遅くわないハズっ(^^;

>汎用エンジン作ってくれないかな

HSP用の汎用エンジンっていうと、つまりどんなのを指すんですか?
ちょっとした例を挙げて下されば、助かるんですが☆

#なんか、また一から作りたくなってきちゃいました〜♪



osakana

リンク

2006/10/5(Thu) 09:59:38|NO.2857

私も昔作ってみた事があります、とはいっても何年か前なので
今思えばおもちゃみたいな物ですけどね。
けっこう大変だけど楽しかたなあ。(初めて作るものは何だって楽しい とか)

>汎用エンジン
分かるようで分からない?、どこまでをそう呼ぶかと言う事ですよね。
>#なんか、また一から作りたくなってきちゃいました〜♪
wikiの出番?? 詳しい使い方知らないけれど・・。
でもまだ分からない段階で勝手に盛り上げ無い方がいいですね。



男性A

リンク

2006/10/5(Thu) 17:08:38|NO.2858

>>改行の為の解析もしなければならない筈です(^^;
僕のやり方ですが、例えば横幅が5文字分のウィンドウなら
通常は一行4文字ずつ表示します。

  わたしは上京したいです。
  ↓
  |わたしは○|
  |上京した○|
  |いです。○|

 でも、りささんが言うように句読点や促音が文頭に来る場合
もあるので、hsp3util.asや独自の文字列を表示する命令に手を加
えます。
 一文字ずつ表示する命令っていうのは、パラメータに長い文字
列を渡したところで、結局表示する時には一文字ずつ抜き出して
いるので、その時にその文字が句読点や促音、撥音かどうかを調
べます。表示させたい文字列のうち、取得した文字列が5の倍数
目にあたり、尚且つ"。"や"、","っ","ん"等なら、改行せずにウ
ィンドウの五文字目にあたる部分に表示させてみます。

   わたしは、上京したいです。
   ↓
   |わたしは、|
   |上京した○|
   |いです。○|

普通の文章ならコレで対処できると思いますが、「うわっ!」とか
会話文が多いのなら、横幅が5文字なら3文字ぐらいを通常の上限
としておいて、二文字分ぐらい余裕を持たせておいた方がいいかも
しれませんね。

この置き換え、ちょいと応用すると、ゲームのプレーヤーが主人公
の名前を登録するとかいうこともできるようになるので便利ですよ。

>>wikiの出番?? 詳しい使い方知らないけれど・・。
確かに、いろいろな作業を分担して作るのは面白そうですね。僕も
使い方はよく知らないけど……。

>>なんか、また一から作りたくなってきちゃいました〜♪
>>汎用エンジン作ってくれないかな

前に作ったのはかなり効率が悪かったんで、いまの作品を作り終え
たらまたやってみようかな。ただ、そこになるまでに何ヶ月かかる
やら…(T_T)
それこそ汎用エンジンにしてみたいですね。



りさ

リンク

2006/10/5(Thu) 18:30:09|NO.2859

>この置き換え、ちょいと応用すると、ゲームのプレーヤーが主人公
>の名前を登録するとかいうこともできるようになるので便利ですよ。

いや、本当にそうですね( ̄▽ ̄¥

通常を1文字下げておいて、特殊な場合のみ最大表示するんですかぁ〜(感動
なるほど(^^#
確かに、実装できるとスゴイ便利ですね☆

非常に贅沢なケースがあります・・・例えば、

  りさってすごいネ   ズミ好き。
の場合は、「りさってすごいネ」で読めてしまうので、
ワザと改行したりしますが、こういうケースは目を瞑って(笑

>手を加えます。

少しアルゴリズムを考えてみたんですけど、
それほど困難なモノでもなさそうですね☆

頑張ればイケるかも、です(^^

>>wikiの出番?? 詳しい使い方知らないけれど・・。
>確かに、いろいろな作業を分担して作るのは面白そうですね。

イイですねっ☆
是非やりたいです!
・・・力になれるか分からないですけど(^^;

それより、やっぱり同じく使い方が分からないんですwww
まずは使えるようにならなきゃですね(p´o`q

>汎用エンジン作ってくれないかな
>分かるようで分からない?、どこまでをそう呼ぶかと言う事ですよね。
>それこそ汎用エンジンにしてみたいですね。

みんなで作れば、どんなものでも出来そうな気がしますネ♪



GENKI

リンク

2006/10/5(Thu) 21:52:21|NO.2860

> 確かに、実装できるとスゴイ便利ですね☆

 禁則処理ってやつですね。
作ったのが昔すぎてさっきまで忘れていたのですが、PSBSに禁則処理に対応した
改行モジュールがありました。HSP2用ですが移殖すれば使えると思いますよ。

> 通常を1文字下げておいて、特殊な場合のみ最大表示するんですかぁ〜(感動

とはちょっとちがって1文字はみ出させています。
「、」とか「。」なら1もじはみ出しても問題ないかなぁと…。



> 誰かHSP用の汎用エンジン作ってくれないかな…だめか。w

 市販ゲームの演出などでイベント発生時などに、決まった会話や行動を
起こすことがあります。こういうイベント内容の作成にそれ用のエンジンが
あればイベント作成とかが楽に行なえないかな?と思っています。


> HSP用の汎用エンジンっていうと、つまりどんなのを指すんですか?
> ちょっとした例を挙げて下されば、助かるんですが☆

 シナリオやイベントを記述しているファイルの構文解析(+暗号解除)を
やってくれるモジュールかプラグインか…そんなイメージです。
変数の扱いや条件文やループの取扱いが結構めんどくさいんですよね。

 具体的なイメージとしてはこんな感じです。
条件分岐や繰り返しなどはエンジン側で処理して、ユーザー(エンジン
使ってプログラム組む人)は、コマンドと引数だけを簡単に受け取れる。
ユーザーはコマンドで動作する部分を書けばよい…というイメージです。
これなら汎用的に利用できるなと…。(RPGやシミュレーションゲームなど
などのイベントとかオープニングとか…)
ん…あれ?HSPそのまま使えばいいのかな…。(^ ^;
あ、そか配布や開発面ではテキストで作れたほうが有利か。w



> それより、やっぱり同じく使い方が分からないんですwww
> まずは使えるようにならなきゃですね(p´o`q

 Wikiはたいてい練習できるページがあるのでそこで練習するといいかも。
失敗しても修正できるから不安がることもありませんよ。
HTMLより簡単と言われるくらいですし…まずは行ってみるべし。
HSP開発Wiki http://hspwiki.nm.land.to/





> 黒猫がコワイけど(笑
(  ̄ー ̄)ニヤリ



kz3

リンク

2006/10/6(Fri) 06:20:42|NO.2861

>HSP開発Wiki http://hspwiki.nm.land.to/

こんなのもありましたよ。HSP連合。http://hspuni.no.land.to/HSPWiki/
コンテンツ増やす意味もこめてHSP連合とか...^^;



りさ

リンク

2006/10/6(Fri) 09:05:31|NO.2862

>HSP2用ですが移殖すれば使えると思いますよ。

ホントですかっ☆
それじゃ、ちょっと拝見させて貰いますね。

>とはちょっとちがって1文字はみ出させています。

必要なのは3文字だと思うので、この場合は3文字ですか?

>会話文が多いのなら、横幅が5文字なら3文字ぐらいを通常の上限
>としておいて、二文字分ぐらい余裕を持たせておいた方がいいかも
>しれませんね。

「あっ、HSPだ。」▽

この点滅する下矢印を含めると、3文字くらい必要な気がするのです(~o~lL

>ん…あれ?HSPそのまま使えばいいのかな…。(^ ^;

確かにw
状況によってですが、独特な処理の場合は、その場所に

#addition "event.hsp"
などとしておけば、処理対象が存在する場合のみ、
アクションを起こすことができると思います(^^
これってどうですか?

でも、HSPから更に小HSP(?)を作るのも面白そうですね☆

>Wikiはたいてい練習できるページがあるのでそこで練習するといいかも。

あう〜。
この SandBox っていうのが、練習ページになるんですね!

でもなんか他人のページを変更しちゃって、変な感じデスw

>(  ̄ー ̄)ニヤリ

# ´艸`)コワ

>こんなのもありましたよ。HSP連合。

ホントですね、こんなのがあったなんてっ。

っていうか、どっから始めればいいんでしょう、こういうの・・・(^^;;



りさ

リンク

2006/10/6(Fri) 13:58:40|NO.2863

ごめんなさい!
開発wikiに何か書こうとしたら、
無意味なページを作っちゃったみたいで(><;

しかも消し方も分からないです・・・(汗)
消せる方、消して貰えませんでしょうか!?

よろしくおねがいしますm(_ _)m

#

簡単な命令解析(?)を作ってみました。
何かここから発展できればいいんですけど(^^;

// /* HSP Command_Analyzer // | CMD = 数 , 数 | CMD = 数 , 数 , 数 */ #define SENTENCE_LEN 256 // 一行の長さ #define TOKEN_LEN 128 // 1トークンの長さ #define TOKEN_ELE 32 // トークンの数 sdim sentence, SENTENCE_LEN sdim token, TOKEN_LEN, TOKEN_ELE n = 0 i = -1 ntoken = 0 sentence = "MusicPlay = 11 , 222, 3333 " ////////////////////////////////////////////////// // 命令名を調べる ////////////////////////////////////////////////// n = strlen( sentence ) // 先頭の空白を読み流す repeat n if ( peek( sentence, cnt ) != ' ' ) { i = cnt break } loop // エラー:空白しか存在しない if i = -1 { mes "空白しか存在しません" :stop } // 最初の文字から最後の文字までを抜き出す getstr string1, sentence, i, ' ' getstr string2, sentence, i, '=' // 「=まで」の位置を保存する i += strsize // 「 まで」か「=まで」で、短い方を採用する if ( strlen( string1 ) < strlen( string2 ) ) { token(0) = string1 } else { token(0) = string2 } // エラー:命令が存在しない if token(0) = "" { mes "命令が存在しません" :stop } ////////////////////////////////////////////////// // 引数を調べる ////////////////////////////////////////////////// repeat TOKEN_ELE if n = i { ntoken = cnt break } getstr string, sentence, i, ',' i+ =strsize tmp = int(string) token( cnt+1 ) = str( tmp ) loop ////////////////////////////////////////////////// // 表示する ////////////////////////////////////////////////// mes "\""+sentence+"\"" mes mes "["+token(0)+"]" repeat ntoken mes "("+token(cnt+1)+")" loop stop



osakana

リンク

2006/10/6(Fri) 17:52:20|NO.2864

なるほど!
引数内ののスペースを処理していないと思ったら、
tmp = int(string)
token( cnt+1 ) = str( tmp )
でスペースが消せるのかー、知りませんでした(^^いやー参考になるなあ。
どんな風になってるのか見つつ勝手に
引数に文字が使えるように改造してみました。
おかしかったら遠慮なく突っ込んで下さい。

#module //前後のスペースを除く #deffunc nospace var p1,var p2 repeat strlen(p2) if peek( p2,cnt )!' ' { getstr p1, p2, cnt, ' ' break } loop return strlen(p1) #global #define SENTENCE_LEN 256 // 一行の長さ #define TOKEN_LEN 128 // 1トークンの長さ #define TOKEN_ELE 32 // トークンの数 sdim sentence, SENTENCE_LEN sdim token, TOKEN_LEN, TOKEN_ELE n = 0 i = -1 ntoken = 0 sentence = "MusicPlay = 11 , 222, 3333 , \"メッセージ\" , 1024 " ////////////////////////////////////////////////// // 命令名を調べる ////////////////////////////////////////////////// n = strlen( sentence ) // 先頭の空白を読み流す repeat n if ( peek( sentence, cnt ) != ' ' ) { i = cnt break } loop // エラー:空白しか存在しない if i = -1 { mes "空白しか存在しません" :stop } // 最初の文字から=の文字までを抜き出す getstr string, sentence, i, '=' // 「=まで」の位置を保存する i += strsize //前後のスペースを除く nospace token(0), string len(0)=stat // エラー:命令が存在しない if token(0) = "" { mes "命令が存在しません" :stop } ////////////////////////////////////////////////// // 引数を調べる ////////////////////////////////////////////////// repeat TOKEN_ELE if n = i { ntoken = cnt break } getstr string, sentence, i, ',' i+ =strsize //前後のスペースを除く nospace token( cnt+1 ), string len(cnt+1)=stat loop ////////////////////////////////////////////////// // 表示する ////////////////////////////////////////////////// mes "\""+sentence+"\"" mes "トークンの数["+ntoken+"]" mes mes "["+token(0)+"]"+" "+len(0)+"文字" repeat ntoken mes "("+token(cnt+1)+")"+" "+len(cnt+1)+"文字" loop stop



GENKI

リンク

2006/10/6(Fri) 23:32:07|NO.2867

> 無意味なページを作っちゃったみたいで(><;
>
> しかも消し方も分からないです・・・(汗)
> 消せる方、消して貰えませんでしょうか!?

 どなたかが消してくださったようです。
kz3さんかな?

 話が弾んでいるようなのでたたき台ページを作ってみました。
適当に使ってやってください。
つ http://hspwiki.nm.land.to/?%B9%BD%CA%B8%B2%F2%C0%CF
スクリプトかってに引用しちゃったので都合悪ければ消してください…。



> tmp = int(string)
> token( cnt+1 ) = str( tmp )

おー!目からうろこですね。
あ、でもこうしたほうが…↓
token( cnt+1 ) = str( int(string) )



りさ

リンク

2006/10/7(Sat) 10:48:08|NO.2871

>でスペースが消せるのかー
>目からうろこですね。

いえいえ、大したことじゃございません☆

>どなたかが消してくださったようです。
>kz3さんかな?

どうもありがとうございます M(_ _)M

>スクリプトかってに引用しちゃったので

なんかスゴイ嬉しいです(^^
どうもありがとうございます!
是非、ご自由に改造して使ってクダサイ。

wikiでもヨロシクです☆

>引数に文字が使えるように改造してみました。
>おかしかったら遠慮なく突っ込んで下さい。

改造どうもです☆そしてオツです(^^v

今ちょっとテストできる環境にいないので、
後ほどじっくりと見させて頂きますv

パッと見、deffunc 後は必ずstat使ってますんで、
関数の方が便利かな・・・と、思ってみたり(^^/
・・・みなかったり・・・?

あと、こんなこと言うのもアレなんですけど、
nospace よりは DelSpace みたいな方が分かり易いと思います。
どうでしょうか(^^?

#

osakanaさんが改造してくださったのに、もう少し手を加えてみようと思います。
もちろん、まだまだ改造する余地はあるはずっ、ですよね。
頑張りマス☆^^☆



osakana

リンク

2006/10/7(Sat) 18:21:28|NO.2880

>たたき台ページを作ってみました。適当に使ってやってください。
GENKIさんが作ってくれたページを見ながらルールの書き方を認識中...

>あと、こんなこと言うのもアレなんですけど
それも含めて突っ込んでくれた方がむしろありがたや

>nospace よりは DelSpace みたいな方が
(NO ○泉(^^;)が頭の片隅に残ってたもので・・・いやいや)
毎度の事ながら結構何も考えずにネーミングしてしまってたので、
GENKIさんが作ってくれたwikiページで修正しておきました。

>関数の方が便利かな
関数にすると必ず戻り値を受け取らなければいけなくなるので、
「別に使わないよ」って時は逆に面倒くさいのでは?と考えてたんですが、
今の所全部受け取ってるみたいだし、こっちも修正してみました。

後はどういう処理が残ってましたっけ?



りさ

リンク

2006/10/7(Sat) 21:39:03|NO.2882

>それも含めて突っ込んでくれた方が

ありがとうございます☆

>今の所全部受け取ってるみたいだし

同じ意見のようです(^^
必要ないところでの戻り値は、猫に携帯電話です(^ж^

本当はエラー処理で、なんらかの問題ある場合は、
NULLを返すとかもアリだと思うんですけど、
この場合の問題あるケースが想定できないので☆

>後はどういう処理が残ってましたっけ?

wikiにも書きたいのですが、

命令 = 引数, 引数, 引数, ... の形式を取得
(osakanaさんので引数は文字列もOK!)

文章の先頭を判定して、
・日本語なら、即表示
・それ以外ならイベント(?)

で、イベントって呼んでいいのか謎ですが、(いわゆるコードです☆)
イベントでは、
・先頭が / から始まるなら、コメントとして無視
・先頭が それ以外は、命令

と処理するのが理想だと思います(^^/
あとなんかありますかw?

もしできたら、男性Aさんがおっしゃってたように、
<img src="a.jpg" border="0">
の形をサポートしたいなぁ、とか。

もし先頭が < から始まるなら、
属性名と属性値を取得して、文字列の多次元配列に取得・・・

<img src="a.jpg" border="0"> 要素 0 1 2 1次 img src border 2次 "a.jpg" 0 *--* color = 255, 0, 0 要素 0 1 2 3 1次 color 255 0 0 2次 不使用

なんて考えてみてるんですけど、どうでしょう(゜x ゜?
違った形式は無謀でしょうか(笑)??

#

それから、最後になってしまいましたが、
このコードでは、"メ ッセージ" という途中にスペースが存在する場合は、
上手く取得されていないみたいです(><;

もちろん、空白が全角なら大丈夫なんで、問題はないんですが、
半角が入ることもありうるならば、対処しないといけないですね☆



男性A

リンク

2006/10/7(Sat) 22:58:05|NO.2883

>もしできたら、男性Aさんがおっしゃってたように、
><img src="a.jpg" border="0">
>の形をサポートしたいなぁ、とか。

html形式は命令によって欲しい要素の名前が違ったりするので
<img src="a.jpg" border="0">
を例にすると、まずはいつもどおり<imgを見つけ出して
「これはimgだな」と判断します。次に終了の>を見つけ出して
<img src="a.jpg" border="0">
を抜き出します。それから、imgならsrcとaltの要素の値が欲し
いと探していくようにするのはどうでしょうか?

話題のwikiにモジュールを上げてみました。
http://hspwiki.nm.land.to/?%B9%BD%CA%B8%B2%F2%C0%CF
...上手く動くハズなんだけど、大丈夫ですか?



七次元

リンク

2006/10/8(Sun) 00:05:26|NO.2884

いい感じに進んでますね。うまく改良していったらかなり簡単にノベルが作れそう(期待
ちょっと話題からずれてしまうんですが、画像や音楽ファイルはどうしたらいいんですかね?
自分的には某RPG作成ソフトみたいに丸見えはいやですな。
ファイルをまとめて暗号化して使用時に複合化ってのもいいんですが、音楽ファイルはメモリ上から再生不可なんで苦戦中・・・
PCMは容量がひどいので圧縮ファイルを使いたいところ。mp3は著作権云々でややこしいからvorbis(ogg)が良いかと。
以前にこの掲示板で質問したけど回答が無かったんですが、HSPでメモリ上のoggをデコードできないんでしょうか?
有名なノベルエンジンの吉里吉里2についているwuvorbis.dllをHSPで使えたらよさそう。
それともやっぱり無理ですかね?



osakana

リンク

2006/10/9(Mon) 01:03:21|NO.2894

> 猫に携帯電話です(^ж^
次世代のことわざ!

> NULLを返すとかもアリ
戻り値は文字数(バイト)なので、有効な文字が無ければ一応0が帰えってくる
たぶん・・・

> と処理するのが理想だと思います
なるへそ!
> もう少し手を加えてみようと思います
と言っていたので、
もすこし待って見よう(タイヤを2度発明しないように。。。と(@_@

> 途中にスペースが存在する場合は...対処しないといけないですね☆
ちゃんと出来てるか分かりませんがwikiにアップしました・・昨日・・・。
peekで左から順に調べて、スペース以外がみつかった場所を記憶、
今度はpeekで右から順に調べて、スペース以外がみつかった場所記憶
頭とお尻のインデックスをもとに文字列を取り出す。と言う具合に一応やって見ました。。
あとさっきも少し書き直しました。


> 話題のwikiにモジュールを上げてみました
> 大丈夫ですか?
おお!。ちょっと時間か借りそうですが見てみます。


> それともやっぱり無理ですかね?
詳しい事は分からないですが、
前のスレッド読み直して少し調べてみました。
16個しか読み込めないというのはたぶん ds_play.dll の事だと思いますが
16個しか読めない代わりに16個同時に鳴らせるので、
このスレッドの目的としては、十分そうです。

メモリからの再生ならパックされたexe内のoggを再生出来るみたいです。(同時再生も可)
16個以上の音を使うなら、そんなに沢山の同時再生をしなければ、
いっぱいパックしといて、スクリプト側でファイルを読み直して、
うまくやりくりする事で、何とか成らないかなと思ったのですが・・・
どうだろう?アクション物だとキツイかな。(HSP3で確認)



osakana

リンク

2006/10/9(Mon) 01:23:21|NO.2896

ds_play.dllを使ってみたら便利ですね。ボリュームやパンの設定も出来るし
でもこの企画標準命令だけでやるんですよね?
使うなら 個々で と言う感じかな。

>> それともやっぱり無理ですかね?
>うまくやりくりする事で、何とか成らないかなと
よく考えたらシーン毎に進む物でないとキツイかも知れませんね。



りさ

リンク

2006/10/9(Mon) 14:45:56|NO.2902

>タイヤを2度発明しないように

すいません(^^ヾ 遅くなりましたっ(汗

>あとさっきも少し書き直しました。

なるほどぉ、スゴク分かりやすいです☆
言葉の違い(
「スペース」を「空白」に統一、
「パラメータ」を「引数」に統一、
「 , 」を「区切」に統一)を含めて、少しコメント入れておきました☆

ちゃんと取得できてますね(^^

>> 話題のwikiにモジュールを上げてみました

参考にさせて頂きます m(_ _)m
とりあえず、今回の解析が目標のところまでいったら
試させて頂きますネ☆

どうもありがとうございます。

>丸見えはいやですな。

全然詳しくないのでロクなことが言えないのですが、
一時的にEXEにパックして、
実行時にカレントディレクトリにコピーして再生って手も無くはないです(^^;

すいません、お力になれなくて・・・
画像ファイルはEXE内、音楽ファイルはdataフォルダにそのまま入れて
配布していたものですから(笑)

ただ、拡張子外すだけでも意外と見られないかもですよ。
こんなことご存知なのは存じておりマスが(゜゜;

#

wiki に載せてみました(初!)
コメント・日本語の判定はこれでいいのでしょうか?
シンプル過ぎて、なんかスゴクあやしい感じデス☆

あと、外部ファイルから読み込みたいので、
そのように少し変えてみたのですが、
複数行だと上手く表示できないですし・・・

どうやって表示しようか迷ってる次第でアリマス( ̄▽ ̄@

もし間違っているところとか、微妙なところとかあったら、
ご指摘ヨロシクお願いします★



りさ

リンク

2006/10/9(Mon) 15:29:02|NO.2906

よく考えたら、テキストファイルを読み込むことは、
全く考えなくていいんですね。

一行を解析すれば、他の処理はプログラマに任せれば・・・。

そうなると解析モジュールっていうのは、この場合、
sentence を受け取って、配列を用意してあげるだけで充分なのですか?

そうなのであれば、外部ファイル読込のために付け足した部分は、
動作確認の為だけにあるようなものですね・・・(涙

#

それから html形式 について色々考えたんですけど、
命令 引数, 引数
   ↓
<命令 指定="" 指定="">

で、一番効率がいいのは、
param(color)
のように連想配列をつかったものではないでしょうか?
(勿論、連想配列を定義しなくてはならないですが)

または、
#enum で全種類のhtml属性・要素に数値を割り当てて
いくことなのではないでしょうか?

なにかこれよりイイ方法をご存知でしょうか(^^?



七次元

リンク

2006/10/9(Mon) 21:18:55|NO.2911

ん?なんか自分勘違いしてるような・・・
これってノベルエンジンを作ってるんじゃなかったんですかな?



りさ

リンク

2006/10/10(Tue) 07:44:34|NO.2914

>これってノベルエンジンを作ってるんじゃなかったんですかな

いえ、全くその通りです☆
あまりに命令解析ばっかり考えていたんでww

というわけなのですが、
どっからどこまでをまとめて作ればいいのかを考えてみました。
メインプログラムは、

;シナリオファイルを読み込む
*main
;一行一行読み込んで、sentence に渡す
// -----
;日本語 → 表示
;コメント → 無視
;通常命令 → 取得
;HTML命令 → 取得

;取得した値に対する処理を行う
// ----
goto *main

という流れで大丈夫でしょうか(^^?

現在wikiで開発中のスクリプトは解析ルーチンとして、
メインプログラムから呼び出せる形が、外から見てシンプルかなぁ・・
と思ってる次第でございマス☆

つまり、メインプログラム内では

シナリオファイルを読み込み、一行ずつ取得する

日本語・コメント・命令 を判定する

日本語なら・・・処理ルーチン

コメントなら・・無視

通常命令なら・・処理ルーチン

HTML命令なら・・処理ルーチン

処理により取得した値を判定(処理ルーチンぁ

戻る

として、
それぞれの処理ルーチンは、外部に設置。又は、deffuncで命令化。

これならば、通常命令しか使わない場合・HTML命令しか使わない場合は、
どちらかをコメントアウトすることによって実現できるかなぁ(^^?と思います。

#

まな(男性A)さんのを拝見させて頂きました。

欲しい要素を予め言い渡すことによって、すごくシンプルになっていますね☆

いま、全力でバグ探しをしてますんで、何か分かったらお伝えします(^^@



りさ

リンク

2006/10/10(Tue) 10:23:48|NO.2915

開発wikiにまとめてみました☆

構文解析とは別に、エンジンを作るためのページです(^^

http://hspwiki.nm.land.to/?%A5%A2%A5%C9%A5%D9%A5%F3%A5%C1%A5%E3%A1%BC%A5%A8%A5%F3%A5%B8%A5%F3



七次元

リンク

2006/10/10(Tue) 13:25:27|NO.2916

ノベルエンジンならexe埋め込みは無理ですね。
ファイルが見えてるとネタばれになる可能性があるので(画像やボイスなどで)
暗号化→外部ファイルで決定ですな。(公の場でソース晒したら意味無いけどw)
それとHTMLよりHSPみたいな命令の書き方の方が書きやすいかも
命令 引数,引数
ってな感じ。HTMLを使ってて良くあるのは引数の名称(borderとか)を何個も書くのはめんどくさいし
何度も書いてると"bordor"みたいにケアレスミスすることがしばしば・・・
引数の名称を書かない分、シナリオスクリプトの容量削減にもなりますし(わずかですがw)
HSPでノベルエンジンを作ることを何回か考えた自分の意見ですがどうでしょうか?



男性A

リンク

2006/10/10(Tue) 15:52:38|NO.2920

>それとHTMLよりHSPみたいな命令の書き方の方が書きやすいかも
たしかに僕も3,4種類エンジンを作ったことはありますが、一長一短って言うところですね。
ただ、この種の話はちょいとここの掲示板とはズレてしまうので、wikiで行うというのはいかがでしょうか?

>ノベルエンジンならexe埋め込みは無理ですね。
>ファイルが見えてるとネタばれになる可能性があるので(画像やボイスなどで)
>暗号化→外部ファイルで決定ですな。(公の場でソース晒したら意味無いけどw)
そうですね。そこは妥協するとしましょう(^_^;
ユーザーが暗号の鍵を指定するなどすれば、簡単ではあるけれども対処できますね。



りさ

リンク

2006/10/10(Tue) 16:32:05|NO.2921

>>HTMLよりHSPみたいな命令の書き方の方が書きやすいかも
>一長一短って言うところですね。

とりあえず、構文解析(命令解析)のいい勉強になると思いまして・・(^^;
エンジンに実装するときは使い分ければいいかなぁと☆

>ノベルエンジンならexe埋め込みは無理ですね。

何かいい方法が見つかるまでは、暗号化で回避するしかないかもですね( ̄η ̄;;
これもいい勉強になりそうな予感★



osakana

リンク

2006/10/10(Tue) 17:49:20|NO.2922

ちょっとみないうちに だいぶん進んでますね。
今時間か無いので、後でじっくり見てきます。



七次元

リンク

2006/10/10(Tue) 21:27:56|NO.2925

>ユーザーが暗号の鍵を指定するなどすれば、簡単ではあるけれども対処できますね。
256通りなら破られやすいので65536通りの暗号化を適用しましょうか。

もうスクリプトの構文しか残ってないかな?
あとはNScripterなり吉里吉里なりを参考にすれば高機能なノベルエンジンが完成しますね。



りさ

リンク

2006/10/11(Wed) 16:10:08|NO.2936

>あとはNScripterなり吉里吉里なりを参考にすれば
>高機能なノベルエンジンが完成しますね。

機能は同等のモノが作れたとしても、処理速度ではかなわないと思います(><;

いくつか作ったことがありますが、どうしてもマウスの動作がひっかかったり、
音楽の再生などがスムーズにいかなかったりするようです。

これはPC側の影響も大きいのですが、
どういうわけか、NSや吉里吉里はこれ等の不満を感じさせません(^^

中間言語だからでしょうかネ☆^^??



七次元

リンク

2006/10/11(Wed) 16:58:21|NO.2938

>中間言語だからでしょうかネ☆^^??
かもしれませんな。
またはHSPの場合は
コーデックがインストールされてないと再生できない=1つに定まっていない
吉里吉里は専用DLLを使う=1つに定まっている
ってことだから、DLLをフルに活用できるとか

変な日本語になってしまったので意味不明ならすみません



りさ

リンク

2006/10/13(Fri) 17:10:14|NO.2957

>コーデックがインストールされてないと再生できない=1つに定まっていない

七次元さん、ありがとうございます。

そのコーデックというのがよく分かりませんが、
とりあえず、DLLをフルに活用できるから、というのが理由なのでしょうか?

それはHSPでも、DLL等を使用することにより、実現することができるのでしょうか?



ONION software Copyright 1997-2021(c) All rights reserved.