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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0328
coinno.13493のD.K.様のソースを改造してしまいました2解決


coin

リンク

2008/3/28(Fri) 09:57:55|NO.14653

 http://hsp.tv/play/pforum.php?mode=all&num=13493 にてD.K.さまが載せられていた
ソースを勝手ながらいじっていたら、ADVゲームを作る人には便利かもしれない…という
ものになった、書き込みさせていただきます。
 D.K.さま、まずかったらおっしゃってください、すぐに消しますので!!


m_default int,int,int,int,int,int,int,str,int,int,int :tex命令のデフォルト値設定。
 ;p1から順に、色r,色g,色b,フォントサイズ,posx,posy,文字装飾,フォント名,表示最大横幅,
  行間,縁取りon/off。
texs int :表示スピード設定。
tex str :表示文字列。


#module;字幅取得関数strwidth定義。字幅ドット数=strwidth(変数名)
#uselib "gdi32.dll" #func GetTextExtentPoint32 "GetTextExtentPoint32A" int,int,int,int #defcfunc strwidth var s_tBuf txtLen=strlen(s_tBuf) dim s_tSize,2 GetTextExtentPoint32 hdc,varptr(s_tBuf),txtLen,varptr(s_tSize) return s_tSize(0) #global #module "texts" ;// 追加命令 ; ames str "string" // メッセージを表示 ; text int delay // hsp3util 互換のテキストディレイモード。 ; ames_cancel // ディレイキャンセル。 onclick gosub 内などで使用可能。 #ifndef text@ #define global text(%1) stwait@hsp3util=%1 #endif #define global ames_cancel delay@mod_ames = 0 ;m_default :tex命令のデフォルト値設定。 ;p1から順に、色r,色g,色b,フォントサイズ,posx,posy,文字装飾,フォント名,表示最大横幅,行間,縁取りon/off。 ;このm_defaultにデフォルトを設定したい場合(フォントサイズ、フォント名、poxy等)、#define等で各ソフトに応じて初期値を設定すること。 #deffunc tex_default int p1,int p2,int p3,int p4,int p5,int p6,int p7,str p8,int p9,int p10,int p11 defr=p1 defg=p2 defb=p3 defs=p4 defx=p5 defy=p6 defst=p7 deff=p8 align=p9 blank=p10 textmode=p11 return #deffunc texs int p1 defspd=p1 return ;使用タグ一覧。 ;@clFF0000:色変更 ;@fs<20>:フォントサイズ変更 ;@fn<MS 明朝>:フォント名変更 ;@fy<1>:フォントスタイル変更 ;@wt<30>:メッセージ表示スピード変更(表示スピードはtextにて設定) ;@df:色・フォント・表示スピードをデフォルトに戻す。 #deffunc tex str p1 clrr=defr:clrg=defg:clrb=defb fnm=deff:fsz=defs:fst=defst crx=defx:cry=defy mwt=defspd color clrr,clrg,clrb font fnm,fsz,fst pos crx,cry lnmx=align;後で置換しとくこと。 buf=p1 slen=strlen(buf) ;mgchは一文字表示するときのx座標 ;mglnは一文字表示するときの行目 ;mgchとmglnにcrxとcry、defxとdefyで操作。 ;idxは何文字目まで読んだか mgch=0 mgln=0 idx=0 ;clickflgはonclickして最後まで表示する用。 clickflg=0 onclick gosub*skip ;mxhighはデフォルトのサイズよりもフォントが大きく指定されたときの行変え用 ;何ポイントデフォルトから大きくなっているかのカウント用。 mxhigh=0 *main if (idx>=slen) : goto*last tmp1=peek(buf,idx);1byte目読み出し tmp2=peek(buf,idx+1);2byte目読み出し ;半角@ if tmp1=64{ ;二文字目も@ if tmp2=64{ mesg=strmid(buf,idx,1) ;今まで表示してきた分がalignを超えたら if mgch+strwidth(mesg)>lnmx{ mgch=0;1文字目を書き出し先に mgln+=1;次の1行を書き出し先に cry+=blank if mxhigh>0:cry+=mxhigh:mxhigh=0 } idx+=2 gosub*disp;文字表示ラベルへ mgch+=strwidth(mesg) goto*main ;タグ判定 }else{ switch strmid(buf,idx+1,2) case "df";デフォルトに戻す color defr,defg,defb font deff,defs,defst mwt=defspd idx+=3 goto*main swbreak case "cl";文字色変更 ;以下で16進数のデータを10進数へ変更 clrr = int( "$"+strmid(buf,idx+1+2,2) );r値 clrg = int( "$"+strmid(buf,idx+1+4,2) );g値 clrb = int( "$"+strmid(buf,idx+1+6,2) );b値 idx+=9 goto*main swbreak case "fs";フォントサイズ変更 repeat;「>」を探す if peek(buf,idx+1+2+1+cnt)=62{ fsz = int( strmid(buf,idx+1+2+1,cnt) ) idx+=5+strlen( strmid(buf,idx+1+2+1,cnt) ) break } loop font fnm,fsz,fst;フォント定義 if fsz>defs:if (fsz-defs)>mxhigh:mxhigh=fsz-def goto*main swbreak case "fy";フォントスタイル変更 repeat;「>」を探す if peek(buf,idx+1+2+1+cnt)=62{ fst = int( strmid(buf,idx+1+2+1,cnt) ) idx+=5+strlen( strmid(buf,idx+1+2+1,cnt) ) break } loop font fnm,fsz,fst;フォント定義 goto*main swbreak case "fn";フォント名変更 repeat;「>」を探す if peek(buf,idx+1+2+1+cnt)=62{ fnm = strmid(buf,idx+1+2+1,cnt) break } loop idx+=5+strlen(fnm) font fnm,fsz,fst;フォント定義 goto*main swbreak case "wt";メッセージフレーム数変更 repeat;「>」を探す if peek(buf,idx+1+2+1+cnt)=62{ mwt = int( strmid(buf,idx+1+2+1,cnt) ) idx+=5+strlen( strmid(buf,idx+1+2+1,cnt) ) break } loop goto*main swbreak swend }} ;全角文字 if (tmp1 >= 129)&(tmp1 <= 159)|(tmp1 >= 224)&(tmp1 <= 252){ mesg=strmid(buf,idx,2) if mgch+strwidth(mesg)>lnmx {;文字数オーバーの場合 mgch=0;1文字目を書き出し先に mgln+=1;次の1行を書き出し先に cry+=blank if mxhigh>0:cry+=mxhigh:mxhigh=0 } idx+=2 gosub*disp mgch+=strwidth(mesg) goto*main ;改行コード }else{if (tmp1 == 13)&(tmp2 == 10){ mgch=0;1文字目を書き出し先に mgln+=1;次の1行を書き出し先に cry+=blank if mxhigh>0:cry+=mxhigh:mxhigh=0 mesg="";改行の場合は文字表示の必要がないので空白 idx+=2 gosub*disp goto*main ;半角文字 }else{ mesg=strmid(buf,idx,1) if mgch+strwidth(mesg)>lnmx {;文字数オーバーの場合 mgch=0;1文字目を書き出し先に mgln+=1;次の1行を書き出し先に cry+=blank if mxhigh>0:cry+=mxhigh:mxhigh=0 } idx+=1 gosub*disp mgch+=strwidth(mesg) } *disp redraw 0 if clickflg=1{pos crx+mgch,cry+defs*mgln:gosub *dispmesg }else{pos crx+mgch,cry+defs*mgln:gosub *dispmesg:wait mwt:redraw 1} return *skip clickflg=1 mwt=0 redraw 0 return *last redraw 1 return *dispmesg if textmode=0 { mes mesg return } if textmode=1 { texx=ginfo_cx:texy=ginfo_cy color clrr,clrg,clrb repeat 2 pos texx+2,texy:mes mesg pos texx-2,texy:mes mesg pos texx,texy-2:mes mesg pos texx,texy+2:mes mesg pos texx+2,texy+1:mes mesg pos texx-2,texy+1:mes mesg pos texx+1,texy-2:mes mesg pos texx+1,texy+2:mes mesg pos texx+2,texy-1:mes mesg pos texx-2,texy-1:mes mesg pos texx-1,texy-2:mes mesg pos texx-1,texy+2:mes mesg loop color clrr,clrg,clrb repeat 2 pos texx+1,texy:mes mesg pos texx-1,texy:mes mesg pos texx,texy-1:mes mesg pos texx,texy+1:mes mesg loop color 255,255,255 repeat 2 pos texx,texy:mes mesg loop return } if textmode=2 { texx=ginfo_cx:texy=ginfo_cy color 255,255,255 repeat 2 pos texx+2,texy:mes mesg pos texx-2,texy:mes mesg pos texx,texy-2:mes mesg pos texx,texy+2:mes mesg pos texx+2,texy+1:mes mesg pos texx-2,texy+1:mes mesg pos texx+1,texy-2:mes mesg pos texx+1,texy+2:mes mesg pos texx+2,texy-1:mes mesg pos texx-2,texy-1:mes mesg pos texx-1,texy-2:mes mesg pos texx-1,texy+2:mes mesg loop color 255,255,255 repeat 2 pos texx+1,texy:mes mesg pos texx-1,texy:mes mesg pos texx,texy-1:mes mesg pos texx,texy+1:mes mesg loop color clrr,clrg,clrb repeat 2 pos texx,texy:mes mesg loop return } #global

 タグ記号を、D.K.様のオリジナルの$から@に変えてしまいましたことご了承ください。
 使用する際には、

#define t_default(%1,%2,%3,%4=20,%5=100,%6=430,%7=1,%8="MS 明朝",%9=600,%10=5,%11=1) tex_default %1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11
screen 0,800,600,,(ginfo(20)-800)/2,(ginfo(21)-600)/4 cls 2 t_default 150,70,50,18,,,1,,,8,1 texs 7 tex {" あいうえお かきくけこ さしすせそ たちつてと なにぬねの はひふへほ まみむめも   "}

 のように、#defineでt_defaultのデフォルトを設定。フォントサイズやフォント名など、
ある程度共通するものを仕込むのが適当。メッセージ表示枠の位置が固定されているゲーム
では便利かも、と。色を変えるのが一番頻度の高い変更場所かと思い、色指定を一番前に
持って来ましたが、そこらへんは用途によって変えるのがよさそうです。

 私はこれに、アンチエイリアス表示モジュールを組み込んで使っています。表示の際のあれ
これを変更する場合には、*dispのあたりをいじれば出来ます。
 あとはこれに、表示途中のクリック待ち(クリックしたら続きの文章が表示される)を
入れれば、実用的になるかもしれません。


 使う場も発表する場も無く、勝手な理由で掲示板を使わせていただいてしまい、申し訳あり
ませんでした。
 また、D.K.さまには勝手ながら感謝の念に耐えません。どうすればタグの理解をしてくれるの
か、と悩んでいたところに氏のソースを拝見し、感銘を受け、勢いと調子に乗ってしまいました。
ご不愉快にさせてしまったら申し訳ありません。
 ご本人さま以外でも、これまずくないか、と思われましたら、仰ってください…。
 すみませんでした…!



この記事に返信する


D.K

リンク

2008/3/28(Fri) 11:28:26|NO.14655

あんなシロモノを作り直して下さるとは…こちらこそありがとうございます。
少なくとも自分がこの掲示板に載せたものに関しては転用しようが改造しようが問題ありませんので。
(もし改造していただけるものなら)ガンガン改造して、公開してくださると
後々同じようなことを考えた人にとって参考になりますし、
そういったことがより活発になればこの掲示板にとってもプラスになると思います。
と調子にのってエラソーなことを言ってみる。

とまあ、そういうわけで全然かまいませんよ。
ぁ、ただ自分の載せたものが原因で何か不具合おきても責任は負えませんのでヨロシク(爆



coin

リンク

2008/3/30(Sun) 22:41:11|NO.14705

D.K.さん>
 そう言って頂けると安心します、ありがとうございます!
 タグの読み込ませなんてどうすれば…と思い、この掲示板で探してみたら、本当にジャスト
ヒットなソースを拝見することが出来て、光明が射した心持ちでした。私も、私のこの書き込
みがどなたかのお役に立てば…発展してもらえれば…と同じ心持ちです。
 何か不具合がございましたら、勝手に改造させていただいて掲示板に書き込むだけでござい
ます(笑)。これからも素敵なソースを楽しみにしています〜!



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