_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ●はじめに ゴーストが完成した! 提出しよう! ちょっと待ってください。 完成の勢いで提出したくなりますが、制作物には思った以上にバグや想定外の動作が潜んでいるものです。 バグのある状態で立たせてもらうのは心苦しいですし、 ゴーストマスカレードでは匿名期間中の修正が難しいです。 提出前に、以下の項目を確認して取り払いましょう。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ●1、記載内容やファイル形式がルールに沿っているか ・descript.txtのcraftmanw(記述している場合はcraftmanも)に偽名が記述されていること   本来の名前や、すでにゴースト界隈で作者名として使われている名前は使用できません。   偽名は作者が分からなければなんでもよいです。(空欄でも可) ・日本語のファイルがないこと   ghost/masterフォルダだけでなく、shell/masterも確認してください。   半角英数字記号以外の名前のファイルは、ファイルのアップロードなどで問題が起きることがあります。 ・トークに政治、宗教、人種に関する差別表現がないこと   どこからが差別表現かは難しいですが、仮に、SNSに書き込んだり配信で喋っても炎上しない程度とします。 ・直接的な性器の描画がないこと   全年齢向けですむ範囲にしてください。   文章である程度表現しても良いですが、画像でモザイクが必要なものは禁止です。 ・容量が10MB以下   辞書フォルダ、シェルフォルダを全てあわせた容量が10MB以下になっていることを確認してください。   サイズが大きくなる原因はたいてい画像ファイルなので、png最適化などもためしてみてください。   オンラインでpngファイルを最適化して容量を小さくしてくれるサイトなどもあります。 ・ネットワーク更新に対応していないか   descript.txtや、辞書ファイル中に「homeurl」が記載されていてはいけません。 ・バニッシュトークが書かれていないか   「OnVanishSelecting」、「OnVanishCancel」、「OnVanishSelected」を辞書に記述してはいけません。   これらのトークを書きたい場合は、ゴーストマスカレード5終了後、本公開するバージョンに行ってください。 ・ランダムチェンジする場合に代用スクリプトを使用しているか   ランダムチェンジする場合、代用スクリプトの呼び出しになっているかを確認してください。 ・推定起動時間を計ったか   必ず初回起動から確認し、最終イベントを見終わるまでの時間を計ってください。   記載はreadmeで、書き方は「シナリオ読了想定時間:XXX分」です。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ●2、大事なストーリーが中断されないか ゴーストのトーク中、ダブルクリックしたことはありますか。 大抵の場合、喋っているトークを中断して、メニューが出たり触り反応を喋ったりします。 これが初回起動や大事なストーリーなどで起きると困ってしまいますね。 中断されたくないトークには「\t\*」を先頭に書いてください。 #--サンプルここから--# *大事なトーク \t\*:これは大事なトークだから全部読んでね。 _○大事な選択肢だよ *○大事な選択肢だよ \t\*:ここも全部読んでね。 >大事なジャンプ先 *大事なジャンプ先 :「>」でジャンプした先のトークは、 ジャンプ前と合わせてひとつのトークになるからいらないよ。 #--サンプルここまで--# 「\t」 これより後ろの部分のトーク中は、マウスクリックなどを無効化します。 このため、必ずトークの先頭付近に書いてください。 中断されたくないトークで使います。 トークが終わると解除されます。 「\*」 これが書かれたトーク中のみ、選択肢がタイムアウトしなくなります。 大事なイベントでの選択肢など、タイムアウトすると困るトークで使います。 表示している選択肢がバルーンから消えると解除されます。 \*は選択肢が無い場合は何も起こらないので、とりあえず書いておいていいと思います。 また、\*も\tもトークが最後まで表示されると解除されるので、 選択肢選択後のトークや名前入力後のトークには、再び書いておく必要があります。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ●3、名前入力がうまく動いているか 初回起動時にユーザ名入力をしたいという場合は多いと思います。 さらに、それ以降のユーザ名入力では、別のトークを実行させたい場合もあると思います。 バグを起こしがちな部分なので、以下のサンプルかこのゴーストの辞書を参考にしてください。 もし以下サンプルを使う場合は、 既存の辞書の「*OnUserInput」や「*OnUserInputCancel」を削除してからコピーして使ってください。 【タブ】はキーボードのTabキーを押して出るタブ記号に置き換えてください。 「(replace(バイト値,1)(R1)(バイト値,1)\(バイト値,1)\\)」は、 入力された内容のうち「\」を「\\」に置き換えています。 これは、名前入力にさくらスクリプトなども入力できてしまうため、「\\」にして無効化するためです。 「\s[0]」だとサーフェス変更のさくらスクリプトになり、(ユーザ名)を呼ばれるたびサーフェスが変更されますが、 「\\s[0]」とすると「\」が無効化されてバルーンに「\s[0]」が表示されます。(里々のφみたいなもの) #--サンプルここから--# #処理部 *OnUserInput >(R0)を空打ちされた【タブ】(is_empty(バイト値,1)(R1)) $(R0)【タブ】(replace(バイト値,1)(R1)(バイト値,1)\(バイト値,1)\\) >(R0)を教えてもらった *OnUserInputCancel >(R0)を空打ちされた【タブ】(compare,(R1),close) #処理部 #初回起動で名前設定 *初回 :名前を入力してください。 \![open,inputbox,ユーザ名] *ユーザ名を教えてもらった :(ユーザ名)ですね。 >初回の終わり *ユーザ名を空打ちされた $ユーザ名【タブ】名無し :では、一時的に(ユーザ名)と呼びます。 >初回の終わり *初回の終わり :よろしくお願いします。 #初回起動で名前設定 #メニューで名前設定 *0つつかれ :メニューです。 _○名前を変える【タブ】名前変更メニュー *名前変更メニュー :ここに入力してください。 \![open,inputbox,新しいユーザ名] *新しいユーザ名を教えてもらった $ユーザ名【タブ】(新しいユーザ名) :(ユーザ名)ですね。 *新しいユーザ名を空打ちされた :では、元の(ユーザ名)のままとします。 #メニューで名前設定 #--サンプルここまで--# _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ●4、ユーザが入力する文字を「==」で比較していないか 以下のように、ユーザに入力してもらった名前によって分岐する処理を作成するとします。 #--サンプルここから--# *トーク【タブ】(ユーザ名)==ユーザ :そろそろ本当の名前を教えてほしいな。 #--サンプルここまで--# 変数(ユーザ名)が初期値に設定した「ユーザ」のままだった場合に候補になるトークを作成しました。 しかし、この書き方だとエラーになる可能性があります。 例えば、ユーザ名が「俺!」と入力されたとします。 その場合、この「(ユーザ名)==ユーザ」は「俺!==ユーザ」となります。 里々には「!=」という「2つが異なる場合」を判定するものがあります。 つまり、「俺」と「=ユーザ」が異なっているかを判断するため、これは異なっているので正しいと判断されます。 ユーザ名や切替時のゴースト名など、何が入るか分からないものは以下の書き方をしたほうが安全です。 (equal(バイト値,1)(ユーザ名)(バイト値,1)ユーザ) 最初の例を書き直すとこのようになります。 #--サンプルここから--# *トーク【タブ】(equal(バイト値,1)(ユーザ名)(バイト値,1)ユーザ) :そろそろ本当の名前を教えてほしいな。 #--サンプルここまで--# _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ●5、(起動回数)を使っていないか 里々には「$起動回数」というシステム変数がありますが、 実際には「satori.dllが読み込まれた回数」が格納されています。 そのため、ネットワーク更新、辞書フォルダ変更、辞書ファイル再読み込みなどでも値が増えます。 以下にうまく動かない可能性のあるサンプルを乗せます。 【タブ】はキーボードのTabキーを押して出るタブ記号に置き換えてください。 #--サンプルここから--# *起動 >特別イベント【タブ】(起動回数)==5 :(0)こんにちは。 *特別イベント $友達フラグ=1 :もう私たち、友達だよね。 #この処理では絶対に友達になれないことがある #--サンプルここまで--# 上記のようにすると、「satori.dllの読み込み回数が4回のときにネットワーク更新した」などで、 「*起動」を経由せず値が「5」になってしまうことがあり、絶対にイベントが起こらなくなってしまいます。 厳密な起動回数は以下のように処理を追加して自分で数える必要があります。 #--サンプルここから--# *起動 $ゴースト起動回数=(ゴースト起動回数)+1 >特別イベント【タブ】(ゴースト起動回数)==5 :(0)こんにちは。 #--サンプルここまで--# _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ●6、トーク名がかぶっていないか 里々では、同じ名前のものが複数ある場合、ランダムで選択するという機能があります。 #--サンプルここから--# #トークがランダムに選ばれて欲しいので、以下は同じ名前「*」で正しいです *トーク :ランダムトーク1 *トーク :ランダムトーク2 *トーク :ランダムトーク3 #以下は「*続き」が被っているため、 #初回起動でマイケルが火星人だと暴露したり、ミステリ小説の犯人が私になったりします。 *初回 :はじめまして。 私はマイケルです。 はじめての英語の教科書で、マイケルを見ませんでしたか? 実際のところ、マイケルが何者であるのか、気になりませんでしたか? >続き *続き :実は、私です。 *ストーリー :私は大変なネタバレを受けたことがあります。 それはミステリ小説のうちのひとつで、読む前に犯人を教えられました。 しかし、私はその犯人にひどく驚きました。 >続き *続き :なんと、火星人でした。 #--サンプルここまで--# 上記のように、同じ名前のものがあるとランダム選択にされてしまいます。 こういった名前は被らないようになるべく長めにしておきましょう。 また、「*」で始まるトーク同士だけでなく、 変数と名前がかぶると現象から原因を推測しづらいバグになってしまいます。 同じ名前にならないようにしましょう。 以下のサンプルでは、「続きのトーク」が単語群と変数でかぶっており、 (続きのトーク)と書いた場合に予想してない文字列になってしまいます。 #--サンプルここから--# *トーク :ランダムトークだよ。 (続きのトーク) @続きのトーク なんてね。 ただそれだけだよ。 このトークに特に意味はないよ。 *トーク $続きのトーク=おみくじ :おみくじしてあげるよ。 結果はメニューから見てね。 *0つつかれ :メニューだよ。 (when、(続きのトーク)==おみくじ、\q[○おみくじを引く,おみくじの結果]) *おみくじの結果 $続きのトーク=なし :(choice,大吉、やったね。,中吉、まあまあ。,末吉、こんなこともあるよ。,凶、あちゃー。) #--サンプルここまで--# 単語群と変数の名前が被っているため、条件を満たしていても「○おみくじを引く」が出なくなります。 (現在の里々では単語群のほうが優先されます) 「$続きのトーク」はセーブデータに保存されているのに、その内容が反映されないというバグになります。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ●7、分裂してしまうトークがないか スコープ(どっちがしゃべるか?)の指定「:」を入れ忘れると起きるもので、よくあるバグです。 里々では、「*」で始まるトークは最初のスコープが相方側に設定されています。 また、クリック待ちである「\x」を使う場合もスコープに注意しましょう。 #--サンプルここから--# *ソロゴーストのトーク (0)このように、トークの最初にスコープ指定がないと、 本体が表示された状態で、さらに相方側にもシェルが表示されるため分裂して見えてしまいます。 *トーク 相方が喋る。 :本体が喋りますね。 :また相方が喋るぞ。 \x ← これはクリック待ちのさくらスクリプトです。 スコープが本体側に自動的に変更されるので注意が必要です。 このセリフは本体が喋っています。 :別の注意点もある。 \x[noclear] ← これはクリック待ちかつ今までのトークを消さないという さくらスクリプトなんだが、これはスコープの移動が起こらない。 したがって今話しているのは相方だ。 ややこしいので注意してくれ。 #--サンプルここまで--# しゃべる方を確実に指定したい場合、里々の処理である「:」でなく、 SSPの処理であるさくらスクリプト「\0」(本体)「\1」(相方)を使用してください。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ●8、処理の記述ミスがないか 割とありがちで、最も数が多く、作者が気づきにくい部分です。 全て取り切るのは難しいですが、最後にざっとでいいので辞書をチェックしてみてください。 誤字脱字くらいなら目をつむれますが、これが「>名前」や「(名前)」で記述ミスがあると致命的です。 「なで」と「撫で」、「好感度」と「高感度」、このへんは誤変換でミスしやすいです。 また、里々ではカッコを多用しますが、これは全角である必要があります。 以下は誤字と半角カッコのせいで、3種類の頭なでられのセリフが全て機能しなくなっています。 #--サンプルここから--# *0headなでられ $好感度=(好感度)+1 >特別な頭なで【タブ】(高感度)>100 >ちょっといい頭なで【タブ】(好感度)>50 >普通の頭なで *特別な頭なで :えへへ……。 *ちょっといい頭撫で :嬉しいな! *普通の頭なで :(頭なでセリフ) @頭なでセリフ わーい。 やったー。 #--サンプルここまで--# また、変数操作で値が計算されないのも起こりがちです。 #--サンプルここから--# *テストトーク $変数1=(変数1)+1 $変数2【タブ】(変数2)+1 #--サンプルここまで--# このトークを3回繰り返すと、変数の中身は以下のようになります。 変数1 → 3 変数2 → φ(変数2φ)+1+1+1 「=」だと、計算されてから格納され、 「【タブ】」(キーボードのTabキーを押して出るタブ記号)だと、計算を行わず格納されるためです。 また、「=」だと存在していない変数をゼロ扱いしてくれるので、初期化も不要になります。 変数1も変数2も最初の実行時には存在していないですが、変数1はきちんと計算されています。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ●9、他ゴーストがアンインストールされた場合専用のトークで起動処理を行っていないか これは限定状況で起こるバグなので、項目名に当てはまらないなら読み飛ばし推奨です。 「*OnVanished」は他ゴーストがアンインストールされた後、 ランダムチェンジで起動された場合に、「*OnBoot」または「*起動」の代わりに発生するトークです。 起動時に起こるイベントの1つなので、ここで起動時のあれこれの処理を挟むこともあります。 ただ、ちょっと予想外な動作をする部分があります。 「*OnOtherGhostVanish」という、同時起動中ゴーストがアンインストールされた場合のイベントがあります。 上記のイベントにトークがない場合、「*OnVanished」が呼び出されます。 もしも「*OnVanished」で変数操作など起動処理をしている場合、思わぬバグが起こるかもしれません。 今回はマスカレードでゴースト複数同時起動がありえるため、要注意です。 なお、「*OnVanished」自体が辞書に無い場合は何も起こりません。 どうしても「*OnVanished」で専用起動トークをさせた上で、 さらに起動時専用の処理もしたい場合、以下を追加してください。 #--サンプルここから--# *OnOtherGhostVanish $スクリプトの一番頭=\C :\* #--サンプルここまで--# 上記は一言で言うと、 「何かトークをしているとSSPが判断するが、表示上も処理上もほぼ影響も与えない」というトークです。 これで同時起動中ゴーストがアンインストールされても「*OnVanished」が呼び出されることはなくなります。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ●10、右クリックのリンク先は存在するか 以下のように、「recommendsites」「portalsites」を記述すると、右クリックメニューにリンクが追加されます。 「sakura.recommendsites」「sakura.portalsites」は本体側、「kero.recommendsites」「kero.portalsites」で相方側です。 これらのリンクにきちんと繋がるかを確認してください。 また、これらはユーザが起動する可能性があるため、悪意あるサイトへのリンクを登録しないでください。 *sakura.recommendsites SSP BUGTRAQ http://ssp.shillest.net/ *sakura.portalsites ゴーストの使い方 - SSP http://keshiki.nobody.jp/ *sakura.portalsites ゴースト回覧板3rd http://jbbs.shitaraba.net/computer/44300/ これらは「sakura.portalsites」の例のように、コピーして複数個書くとメニューに複数行表示されます。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ●11、インストールファイルの記述が正しいか install.txtをゴーストに合わせて書き換えたかを確認してください。 ファイルはこのファイルと同じ階層にあります。 インストールのテストは見落としがちなので注意してください。 以下の2行を必ず書き換えてください。 name,マスカレード4サンプル directory,masquerade4_sample 「name」はゴースト名で、ghost/master/descript.txtのnameと同じ内容を記述してください。 「directory」はインストールされるフォルダ名です。 他のゴーストと被ってしまうと、全てのファイルが一緒のフォルダに格納されてしまうため、とんでもないバグになります。 今回、ここには半角英数記号しか記述できません。 かぶることのなさそうな名前をつけてください。 ・よくない例 gms 頭文字をつないだ文字列(アクロニム)はかぶる可能性があります。 hikari キャラ名など。過去、ゴーストが少なかったころはこういった名前付けがされており、かぶる可能性が高いです。 ひかり 日本語フォルダも可能ですが、今回は企画で案内ゴーストを最後にインストールさせるため使用しないでください。(package形式のファイルをインストールすると、文字コード順で一番最後に来るフォルダのreadmeが表示されるため) ・よい例 ghost_masquerade_sample 複数単語を組合せたものはかぶりづらく、フォルダ名からゴーストを想像しやすく管理しやすいです。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ●12、余分なファイルが入っていないか ゴーストの動作確認をして、想定外の動作をする可能性もバグも見つからなかったら、最後の作業です。 よし、と思ったら、フォルダをまるごとコピーペーストして提出用フォルダを作ってください。 そして、この提出用フォルダから余計なファイルを消してください。 ゴーストを起動すると、自動的にセーブファイル、前回の表示位置などの情報が保存されます。 自動的に読み込まれる設定ファイルのようなものなので、入っていたら困ってしまいますね。 以下のファイルやフォルダがあれば、(フォルダなら中身のファイルごと)削除してください。 ghostフォルダ /ghost/master/satori_savedata.txt /ghost/master/satori_savebackup.txt /ghost/master/profileフォルダ /ghost/master/varフォルダ shellフォルダ /shell/master/profileフォルダ そして、このファイル「チェック項目.txt」と「ルール.txt」も削除しておいてください。 余分なファイルを消した後、提出用フォルダをzipに圧縮したら出来上がり! さあ、提出しましょう。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ●13、提出 提出は以下アドレスへメールで行ってください。 earlduant@yahoo.co.jp タイトルは以下にしてください。 ゴーストマスカレード4提出 本文は以下にしてください。 1行目:作者名 2行目:作者のウェブサイト(SNSアカウントでも可)のURL 3行目:ファイル添付できなかった場合、アップロード先のアドレス 4行目:どうしても必要な補足事項 これ以外の記述は一切行わないようにお願いします。 ##メールサンプルここから## タイトル:ゴーストマスカレード4提出 添付ファイル:ゴーストのzip 本文: あーるでぃー http://earlduant.blog.fc2.com/ ##メールサンプルここまで## ・1行目 普段使っている作者としての名義です。(descript.txtの偽名が違う内容になっていることも確認してください) もしも、今後も作者として名乗るつもりがない場合、空欄にしても良いです。その場合、[匿名]として扱います。 ・2行目 ここにはURLを貼ってください。 空欄でも良いです。2行目は必ずURLの形(httpで始まる)にし、余分な文字を入れないでください。 ・3行目 ファイル添付できない場合、代わりにどこかにアップロードしてそのアドレスを書いてください。 「メール送信したら修正しないこと」を徹底してください。 主催はメール送信直後にファイルダウンロードだけしているかもしれません。 メール送信後に修正を行ってしまうと、主催との認識に齟齬が生まれてしまいます。 もしも修正したくなった場合、主催の返事を待ったあとで、再度同じ形式のメールを送ってください。 ・4行目以降 どうしても必要な情報を入れる場合以外は、必ず空欄にしてください。 入力する例は、商標権のある画像を使っているが版元から了承を得ているなど、重要な補足を伝えたい場合のみです。 受領確認後にミスに気づいたり、修正しての再提出を求められたなど、再提出する場合も、 初回の送信と全く同じテンプレートで送ってください。 作品をチェックし、企画に含めることを決定した場合は受領メールを送信します。 仮にルール違反などが発見された場合、修正依頼メールを送信します。 (いずれも機械的な文言で送るので、冷たい印象を受けるかもしれませんがご了承ください) 企画の終了までは定期的にメールをチェックしてください。 もし、1週間以上経っても主催からの返信がない場合、メールが送れていない可能性があります。 送れたか心配な場合は、同じ内容のメールを再度送信してください。