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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
1115
七次元HSPでノベルエンジン作成に関して12解決


七次元

リンク

2006/11/15(Wed) 13:41:46|NO.3481

どうも七次元です。
以前HSPでノベルエンジンを作るっぽい話があったので製作しようかと思うのですが、色々と悩む点が

まずマスク画像の使用。
HSPのgmode命令の第1引数のモード7でマスク画像を利用して立ち絵などを貼り付けることが可能ですが
どうも他のエンジン(NScripterとか)と違って、黒に近い色が透過する仕組みになっています。
色の置換を試してみようと思いましたが、マスク画像は2色画像ではないのでむずかしいです。

あとバッファ(変数)内のデータの量。
strlen命令だとバイナリで00の部分までしかデータの量を測ることができません。
これはノベルエンジンだけでなくほかのソフトでも困っていることです。
ファイルから読み込む時はexistなどでサイズがわかりますが、メモリ内のデータのサイズはどうしたらいいのか・・・

今の時点では主にこれらに困っています。
解決方法などありましたらよろしくお願いします。



この記事に返信する


七次元

リンク

2006/11/15(Wed) 13:44:37|NO.3482

>HSPのgmode命令の第1引数のモード7
文がおかしいorz
gmode 7,*,*,*
ということです・・・



GENKI

リンク

2006/11/15(Wed) 22:06:09|NO.3491

> 以前HSPでノベルエンジンを作るっぽい話があったので製作しようかと思うのですが、

 現在、HSP開発Wikiで開発が進んでいます。
この手の開発は掲示板よりWikiの方がやりやすいです。
七次元さんのネタもこっちで考察してみてはどうでしょう?

HSP開発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/11/15(Wed) 22:17:10|NO.3492

開発wikiがあったんですね・・・
HSPwikiにあまり情報が無いと思ったらみんなそっちで活動していたのか。

ですが自分が参加できるのか・・・
迷惑にならないように一人で開発します
なので、できればこちらで回答お願いします。



KIMU

リンク

2006/11/16(Thu) 00:15:46|NO.3493

聞きたい事が、よく分からないんですが・・・
他のエンジン用に作られたマスク画像のファイルを、HSPで利用できるように変換する方法?
ファイルデータ自体を、変更していいならペイントとかで色の反転で済むし

読み込んでからなら
1・右側にマスク画像付きのファイルを読み込む
2・作業用のウィンドウバッファを確保
3・2のバッファを黒で塗りつぶす
4・1のバッファから2のバッファにマスクだけ右半分にコピー(gmode 0で)
5・1のバッファの右半分を白で塗りつぶす
6・1のバッファの右半分に2からgmode 7で左半分をコピー(これでアルファ値が反転)


buffer 2 picload "alphatest.bmp" hwx=ginfo_winx/2 wx=ginfo_winx wy=ginfo_winy buffer 3,wx,wy color 0,0,0:boxf gmode 0 :pos hwx,0 :gcopy 2,hwx,0,hwx,wy gsel 2 color 255,255,255 :boxf hwx,0,wx,wy gmode 7,hwx,wy :pos hwx,0 :gcopy 3,0,0,hwx,wy

こんな感じ
自分の目で見た限りは、ちゃんと出来てると思う・・・


>あとバッファ(変数)内のデータの量。
うーん、なにが聞きたいのか良く分からないけど・・・

大き目の配列変数を作っといて、データを追加して行って
保存する時に、必要な分だけを保存する為のサイズを知りたい?

テータを追加した時の最大要素数を記録しといて
その(要素数+1)*4(実数なら*8)

変数とデータがどんな物を使っているか分からないので
想像での解答は、これが限界・・・



GENKI

リンク

2006/11/16(Thu) 00:28:53|NO.3494

> あとバッファ(変数)内のデータの量。
> strlen命令だとバイナリで00の部分までしかデータの量を測ることができません。

たぶんこれのことだと思います。
HSPCTX構造体から取得できるっぽいです。
http://hspwiki.nm.land.to/?HSP3%2FSTRBUF

分からないのですが、バッファサイズ取得して何をするのに使うのでしょうか?


> 色の置換を試してみようと思いましたが、マスク画像は2色画像ではないのでむずかしいです。

 ペイントソフトでやるネガポジ反転のようなことをやりたいということでしょうか?
それぞれ255から引けばよいと思います。
(質問内容の解釈あってます?答えてみたものの自信がない。間違ってる気がする…。^_^;)




> 迷惑にならないように一人で開発します

そうですか、気が向いたら手伝ってもらえると助かります。



KIMU

リンク

2006/11/16(Thu) 16:40:04|NO.3508

>それぞれ255から引けばよいと思います。
Vram直接なら xor でRGB纏めて変換できるからpget+psetよりは早いかな・・・


buffer 2 picload "filename" ;NScripter仕様のマスク付き画像 mref Vram,66 wx=ginfo_winx wy=ginfo_winy xrem=(wx*3)\4 hwx=wx/2 hvwx=hwx*3 repeat wy cnty=(wx*3+xrem)*cnt repeat hwx memcpy a,Vram,3,0,cnty+hvwx a=a^$ffffff memcpy Vram,a,3,cnty+hvwx,0 cnty+3 loop loop gsel 0 gmode 7,hwx,wy :pos 0,0 :gcopy 2,0,0,hwx,wy



七次元

リンク

2006/11/16(Thu) 17:54:54|NO.3512

お返事ありがとうございます。

>それぞれ255から引けばよいと思います。
自分もそれを考えて見たのですが1点1点やっていくとawait 0でもかなり時間がかかってしまうんです・・・
速度的に早くて、処理が簡単なKIMUさんの1つ目のやり方を使わせていただきます。
マスク画を作る方法(ソフト的に)がわからなくて、フリーので作ったマスクをHSPで使用したいと考えてました。

>分からないのですが、バッファサイズ取得して何をするのに使うのでしょうか?
>うーん、なにが聞きたいのか良く分からないけど・・・
情報の不足で申し訳ありません。
バイナリデータを汎用圧縮形式(zlib)で圧縮した際、圧縮後のデータサイズがわからない。テキストデータを暗号化(バイナリ化)
したときに00が混じってしまうので、strlenではサイズがわからない。っということです。
文字(バイナリ)の置換の時も置換ごとに増加量を記録すればなんとかなるのですが、少しでも処理を早くしたいので変数のサイズを
知りたいです。
最終的にはファイルに出力などを考えています。

GENKIさん、KIMUさん、わかりやすい回答に感謝してます。


それで追加質問で申し訳ないのですが、固定幅フォント(TrueTypeFontだったかな?)の一覧を取得するにはどうすればよいでしょうか?
フォントフォルダから拡張子ttfのものを取得して、バイナリからフォント名を取得。っていう感じですか?
どなたか情報があればお願いします。



GENKI

リンク

2006/11/17(Fri) 19:59:31|NO.3554

> テキストデータを暗号化(バイナリ化)
> したときに00が混じってしまうので、strlenではサイズがわからない。っということです。

うーん、そうなのですか。
(やったことない範囲なのでよくわからないのです。^_^;;)


> 固定幅フォント(TrueTypeFontだったかな?)の一覧を取得するにはどうすればよいでしょうか?

 私には分からないのでひとまずヒントになりそうな情報だけでも…。
フォントの一覧を取得するサンプルはここ↓にありました。
http://smile.poosan.net/perl-bin/hsp/ver3/hsp3.cgi?print+200510/05120037.txt

よく見てないんで等幅かプロポーショナルかの判定ができるかどうかは分かりません。(^ ^;



.

リンク

2006/11/17(Fri) 23:56:58|NO.3562

.



Irisawa

リンク

2006/11/18(Sat) 11:49:50|NO.3567

> 開発wikiがあったんですね・・・
> HSPwikiにあまり情報が無いと思ったらみんなそっちで活動していたのか。

まあ、最近はHSPWikiの動きが少ないかも知れませんね。

> ですが自分が参加できるのか・・・
> 迷惑にならないように一人で開発します
> なので、できればこちらで回答お願いします。

別にこれに関しては直接開発ができなくてもいいと思いますよ。
例えば、このような仕様にしたらどうかなどの提案だけでもとてもすばらしい強力になると
思いますし、提示されているサンプルが非常に参考にもなります。
また、応援のようなコメントだけでもいいのではないでしょうか。



KIMU

リンク

2006/11/18(Sat) 15:56:51|NO.3574

>速度的に早くて、処理が簡単なKIMUさんの1つ目のやり方を使わせていただきます。
試してないけど、色減算合成コピー利用した方が手っ取り早いかもしれない
1・作業用ウィンドウバッファに画像読み込み
2・HSP仕様の画像保存ウィンドウバッファを作る
3・1から左半分を2のバッファ左側に通常コピー
4・1から右半分を2のバッファ右側に色減算合成コピー(新しくウィンドウ作ると白で初期化されてるのを利用)

NO.3493の奴だとboxf*2,gcopy*2回必要だけど
こっちならgcopy*2回で済む

>バイナリデータを汎用圧縮形式(zlib)で圧縮した際、圧縮後のデータサイズがわからない。テキストデータを暗号化(バイナリ化)
テキスト暗号化は、暗号化してもサイズは変わらないから
元のデータからサイズ分かるんじゃない?
後は、0にならないように暗号化するか・・・
(使えるかどうかは暗号化の方法によるけど)

圧縮は圧縮してる所で管理するしか無いような・・・
(データの終点がHSPのシステムからは分からないと思う)

自分だったら、通常時は暗号化も圧縮もしないでファイル出力しといて
配布する時だけ圧縮暗号化するようにするかなぁ

フォントの事は分からない・・・



七次元

リンク

2006/11/19(Sun) 13:53:40|NO.3595

何度も回答していただき、ありがとうございます。

>フォントの一覧を取得するサンプルはここ↓にありました。
自分にはまったく内容がわからないので等幅のみをリストアップする方法がわかりませんでした・・・
NScripterみたいにメニューバーから選ぶ式にしたかったのですが、リストが取得できないようなので
フォント選択ダイアログで等幅フォントのみ選ぶ方法を見つけたのでそれで代用します。

>また、応援のようなコメントだけでもいいのではないでしょうか。
そうですね。空気読んでコメントしてみたいと思います。

>試してないけど、色減算合成コピー利用した方が手っ取り早いかもしれない
色々な方法をありがとうございます。
速度を測ってみて一番早いのを使用してみます(あまり変わらないと思うけど)

>元のデータからサイズ分かるんじゃない?
暗号化などは計算したらサイズがわかるのですが、少しでも高速化したいもので・・・

>(データの終点がHSPのシステムからは分からないと思う)
00が10個連続であれば終点。っという方法でやってみたいと思います。
ユーザーがどんなデータを使用するかわかりませんが・・・

>配布する時だけ圧縮暗号化するようにするかなぁ
一応そのつもりです。
複合化部分はあとで作ってもいいのですが、いつでも取り組めるようにしたかったので


みなさんのおかげで色々と解決しました。
また何か困ったことがありましたらよろしくお願いします。



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