不撓不屈

戦国史同盟管理人・蛛賢(Shuken)のブログです。 サイト運営情報、技術情報、備忘録、作品公開等について投稿しています。

propsgames

こんにちは。蛛賢です。
PropsGamesでRPGを作りました。



作りながら思ったことを以下徒然に書きます。
共感いただいたり、作られる際の参考になれば幸いです。

なお、2021年3月時点の感想であるため、現仕様と異なる場合がありますのでご了承ください。


≪困ったこと≫
  • 画像素材をドラッグ&ドロップで移動すると縦座標が整数とならないためエラーとなります。
  • 「戦闘画面」の画像の倍率を変更してもリロードしなければ反映されません。

≪今後実装されると嬉しいなと思ったこと≫
  • 1~4番目いずれかを指定してプレイヤーキャラクター名を引ける変数があると嬉しいです。(例:左から1番目の主人公の名前)
    ※行動中のキャラクター、選択中のキャラクターは引くことができます。
  • 「小説」の枠内センタリング表示があると嬉しいです。
  • 選択肢の表示方法を現行の「均等間隔」と、背景を見せるために「下寄せ」があると嬉しいです。
  • 戦闘時の攻撃対象を選択するときに、敵を明るくするだけでなく、攻撃者(プレーヤー)も明るくしてもらえると嬉しいです。
  • 各戦闘のプライベート変数もあった方が嬉しいです。(「ターン前」「ターン後」に常時発生させないイベントのタイミングを分岐させるため)
  • 戦闘場面に切り替わるときのBGMがフェードであることに対して、戻るときがフェードでないような(?)気がします。私はフェードの方が嬉しいです。
  • 戦闘イベントで「中断」させる命令があると嬉しいです。(敵が逃げ出した、等)

≪ちょっとしたこと≫
  • 「数値計算」のボタンに「0」があった方が良いと感じました。(他の数字はあるので)
  • 「呼び出し時」の並びは「コード名」等でソートされると嬉しいです。
  • 「場面」の並びは「場面」タイトル等でソートされると嬉しいです。

≪プレーヤー目線≫(2021.6.27 追加)
  • ZodiacはRPGなので、ユーザログイン(オートセーブ有効)をゲーム開始の必須条件としたいな、と思います。(途中でログインしていないことに気づくと悲しいため)
  • トップページにあるゲームのソート順選択、ジャンル分けがあると嬉しいです。
  • トップページにあるゲームのplay数は閲覧数なので、クリア数もあると、最後まで行きつきやすいものなのか、参考になるかと思いました。当該カウンタについては、作者側としてもplay数やクリア数の分布を制作画面で見れたら嬉しいな、と思います。また、play数やクリア数の月間や総ランキングがあると励みになります。

この他、戦闘システムや道具、装備品等の基本機能が強化された折には、「Zodiac Walk」も沿って更新しようと思っています。

作ったゲームを友人に手軽に送信できるのが良いですね。

実はこの架空大陸を舞台としたストーリーは結構前(2007年あたり)から温めていて、当初は12か国による戦略SLGを戦国史でシナリオ制作するつもりでいましたが、忙殺されてお蔵入りとなっていたものです。

こういった形で表に出すことができて良かったです。ありがとうございました。
zwp_title


    このエントリーをはてなブックマークに追加 mixiチェック

    こんにちは。蛛賢です。
    PropsGamesでRPGを作りました。



    備忘も兼ねて「Zodiac Walk Prologue」の制作手順を投稿します。
    今回はフィールドエンカウント及び戦闘です。

    Zodiacではフィールドを1歩進むとランダムで敵と遭遇したり、お金を拾ったりします。

    黎明の平原
    黎明のイベント

    ◇フィールドイベント
    最初の選択肢で「歩く」以外であれば、街に移動したり、エンディングにいきます。
    「歩く」であれば、「//一歩進む」以降のランダム処理に進みます。

    敵のエンカウント等が終わったら、

    <場面移動 移動先="エルティア郊外" アニメ="瞬間移動" />

    で最初の選択肢に戻ります。
    <音楽 ファイル="フィールド_PerituneMaterial_Wish3.mp3" ループ="on" フェード="2000" 音量="40" />

    <画像表示 ID="367" 透明度="100" 時間="2000" />
    <もしも 条件="共通.flg平原初回=FALSE" タイプ="フラグ" >
    <画像表示 ID="542" 透明度="100" 時間="2000" />
    <待機 時間="2000" /> 
    <画像表示 ID="542" 透明度="0" 時間="2000" />
    <待機 時間="2000" />
    <変数変更 変数="共通.flg平原初回" 値="TRUE" />
    </もしも>
    <画像表示 ID="543" 透明度="100" 時間="2000" />
    <待機 時間="2000" /> 


    <もしも 条件="共通.flgボス=FALSE" タイプ="フラグ" >

    <選択>
    <会話 名前="" 速度="0" >
    どうしますか?<改行 />
    【所持金】<変数表示 変数="共通.int所持金" /> Coin<改行 />
    【歩 数】<変数表示 変数="共通.int歩数" /> 歩<改行 />
    【討伐数】<変数表示 変数="共通.int討伐数" /> 体
    </会話>

    <選択肢 メッセージ="歩く" >
    </選択肢>

    <選択肢 メッセージ="街に戻る" >
    <音楽 フェード="0"/>
    <画像表示 ID="543" 透明度="0" 時間="2000" />
    <画像表示 ID="367" 透明度="0" 時間="2000" />
    <待機 時間="2000" /> 
    <場面移動 移動先="エルティア市街" アニメ="瞬間移動" />
    </選択肢>

    <選択肢 メッセージ="次の国に行く(200Coin)" >
    <もしも 条件="int所持金>=200" タイプ="数値" >
    <選択>
    <会話 名前="" 速度="0" >
    エンディングに移行します。<改行 />
    よろしいですか?
    </会話>

    <選択肢 メッセージ="はい" >
    <音楽 フェード="2000"/>
    <画像表示 ID="543" 透明度="0" 時間="2000" />
    <画像表示 ID="367" 透明度="0" 時間="2000" />
    <待機 時間="2000" /> 
    <場面移動 移動先="ラコルミベルナ市街" アニメ="瞬間移動" />
    </選択肢>

    <選択肢 メッセージ="いいえ" >
    <場面移動 移動先="エルティア郊外" アニメ="瞬間移動" />
    </選択肢>
    </選択>

    </もしも>

    <小説 横="中央" 縦="枠中央" 幅="16" 高さ="1" 速度="60" >
    所持金が足りません<クリック />
    </小説>
    <場面移動 移動先="エルティア郊外" アニメ="瞬間移動" />
    </選択肢>
    </選択>
    </もしも>

    <もしも 条件="共通.flgボス=TRUE" タイプ="フラグ" >

    <選択>
    <会話 名前="" 速度="0" >
    どうしますか?<改行 />
    【所持金】<変数表示 変数="共通.int所持金" /> Coin<改行 />
    【歩 数】<変数表示 変数="共通.int歩数" /> 歩<改行 />
    【討伐数】<変数表示 変数="共通.int討伐数" /> 体
    </会話>

    <選択肢 メッセージ="歩く" >
    </選択肢>

    <選択肢 メッセージ="街に戻る" >
    <音楽 フェード="0"/>
    <画像表示 ID="543" 透明度="0" 時間="2000" />
    <画像表示 ID="367" 透明度="0" 時間="2000" />
    <待機 時間="2000" /> 
    <場面移動 移動先="エルティア市街" アニメ="瞬間移動" />
    </選択肢>
    </選択>
    </もしも>


    //一歩進む

    <画像移動 ID="367" 横="-162" 縦="-44" 速度="100"/>
    <待機 時間="1" />  
    <画像移動 ID="367" 横="-162" 縦="-20" 速度="100"/>
    <待機 時間="400" />
    <画像移動 ID="367" 横="-162" 縦="-44" 速度="100"/>
    <待機 時間="1" />  
    <画像移動 ID="367" 横="-162" 縦="-20" 速度="100"/>

    <計算 結果="int歩数" 式="共通.int歩数+1" />

    <待機 時間="1000" />

    <ダイス 代入先="共通.intダイス" 目="1,2,3,4,5,6,7,8,9,10" 速度="30" 遅延="0" 順番="裏実行"/>

    <もしも 条件="共通.intダイス=1" タイプ="数値" >
    <コード呼出 コード名="01_野盗戦" />
    </もしも>

    <もしくは 条件="共通.intダイス=2" タイプ="数値" >
    <コード呼出 コード名="02_盗賊戦" />
    </もしくは>

    <もしくは 条件="共通.intダイス=3" タイプ="数値" >
    <小説 横="中央" 縦="枠中央" 幅="8" 高さ="1" 速度="60" >
    2Coin 拾った<クリック />
    </小説>
    <HP 操作="足し算" 範囲="全体" 値="1" 時間="1000" />
    <計算 結果="int所持金" 式="共通.int所持金+2" />
    </もしくは>

    <もしくは 条件="共通.intダイス=4" タイプ="数値" >
    <小説 横="中央" 縦="枠中央" 幅="7" 高さ="1" 速度="60" >
    何もなかった<クリック />
    </小説>
    <HP 操作="足し算" 範囲="全体" 値="1" 時間="1000" />
    </もしくは>

    <もしくは 条件="共通.intダイス=5" タイプ="数値" >
    <コード呼出 コード名="01_野盗戦" />
    </もしくは>

    <もしくは 条件="共通.intダイス=6" タイプ="数値" >
    <コード呼出 コード名="02_盗賊戦" />
    </もしくは>

    <もしくは 条件="共通.intダイス=7" タイプ="数値" >
    <コード呼出 コード名="03_山賊戦" />
    </もしくは>

    <もしくは 条件="共通.intダイス=8" タイプ="数値" >
    <コード呼出 コード名="04_グランホッパー戦" />
    </もしくは>

    <もしくは 条件="共通.intダイス=9" タイプ="数値" >
    <もしも 条件="flgボス=TRUE" タイプ="フラグ" >
    <もしも 条件="int討伐数>10" タイプ="数値" >
    <コード呼出 コード名="10_ボス戦" />
    <場面移動 移動先="エルティア郊外" アニメ="瞬間移動" />
    </もしも>

    <小説 横="中央" 縦="枠中央" 幅="7" 高さ="1" 速度="60" >
    何もなかった<クリック />
    </小説>
    <HP 操作="足し算" 範囲="全体" 値="1" 時間="1000" />

    <小説 横="中央" 縦="枠中央" 幅="16" 高さ="1" 速度="60" >
    …が、かすかに気配を感じる<クリック />
    </小説>
    <場面移動 移動先="エルティア郊外" アニメ="瞬間移動" />
    </もしも>

    <小説 横="中央" 縦="枠中央" 幅="7" 高さ="1" 速度="60" >
    何もなかった<クリック />
    </小説>
    <HP 操作="足し算" 範囲="全体" 値="1" 時間="1000" />
    </もしくは>

    <その他>
    <小説 横="中央" 縦="枠中央" 幅="7" 高さ="1" 速度="60" >
    何もなかった<クリック />
    </小説>
    <HP 操作="足し算" 範囲="全体" 値="1" 時間="1000" />
    </その他>

    <場面移動 移動先="エルティア郊外" アニメ="瞬間移動" />

    ◇エンカウントイベント
     エンカウントしたら「呼び出し時」の方のイベントに飛ぶようにしました。
     戦闘イベントの「中断」がいまひとつ使い方が分かっていません。
    <小説 横="中央" 縦="枠中央" 幅="7" 高さ="1" 速度="0" >
    敵が出現した<クリック />
    </小説>

    <画像移動 ID="367" 横="-162" 縦="-32" 速度="1"/>

    <小説 横="中央" 縦="枠中央" 幅="5" 高さ="1" 速度="0" >
    Lv.2 盗賊<クリック />
    </小説>

    <戦闘 名前="盗賊戦" >

    <勝利>
    <小説 横="中央" 縦="枠中央" 幅="6" 高さ="1" 速度="0" >
    敵を倒した<クリック />
    </小説>

    <小説 横="中央" 縦="枠中央" 幅="6" 高さ="1" 速度="0" >
    + 5 Coin<クリック />
    </小説>

    <計算 結果="int所持金" 式="共通.int所持金+5" />
    <計算 結果="int討伐数" 式="共通.int討伐数+1" />
    </勝利>

    <敗北>
    <小説 横="中央" 縦="枠中央" 幅="6" 高さ="1" 速度="0" >
    全滅した<クリック />
    </小説>

    <画像表示 ID="367" 透明度="0" 時間="2000" />
    <待機 時間="2000" /> 
    <場面移動 移動先="ゲームオーバー" アニメ="瞬間移動" />
    </敗北>

    <中断>
    </中断>

    </戦闘>

    ◇戦闘選択画面
     エンカウントイベントから遷移する戦闘を制作します。
     あらかじめノンプレイヤーキャラクターとして敵を作っておきます。
     戦闘画面では画像を追加できませんが、ターン前後にイベントを挟むことができます。
     これを利用して相手の特殊攻撃や演出等を表現することが可能です。
    <変数変更 変数="共通.intTemp" 値="0" />

    <それぞれ 対象="敵全体">
    <人物参照 代入先="共通.intダイス" 役割="$選択中" 属性="HP" />
    <計算 結果="intTemp" 式="共通.intTemp+共通.intダイス" />
    </それぞれ>

    <もしも 条件="intTemp>0" タイプ="数値" >

    <ダイス 代入先="共通.intダイス" 目="1,2,3,4,5" 速度="30" 遅延="0" 順番="裏実行"/>

    <もしも 条件="共通.intダイス=3" タイプ="数値" >

    <小説 横="中央" 縦="枠中央" 幅="11" 高さ="1" 速度="60" >
    盗賊は逃げ出した…<クリック />
    </小説>

    <待機 時間="100" />  

    <効果音 ファイル="逃走.mp3" 音量="80" />
    <待機 時間="1" />  
    <画像移動 ID="367" 横="-162" 縦="-34" 速度="400"/>
    <待機 時間="1" />  
    <画像移動 ID="367" 横="-162" 縦="-20" 速度="400"/>

    <待機 時間="400" />  

    <小説 横="中央" 縦="枠中央" 幅="7" 高さ="1" 速度="60" >
    失敗!<クリック />
    </小説>

    </もしも>

    </もしも>
     
    ↑ただの演出である逃亡失敗。
    (戦闘を中断させるイベントはないため)

    イベントを駆使すれば独自システムの戦闘を表現できるのかもしれませんが、
    今回は基本機能の〇△☆のダイスによる戦闘システムを活かすこととしました。

    また、ボスは1ターン力を溜めて、次のターンで全体攻撃を放ってきますが、これもイベントで実装しています。

    まぁ…全体的に、PERITUNE様(BGM)、CLOSET様(画像)、効果音ラボ様の素材のおかげで成立しているんですけどね…

    取り急ぎ今回はここまで。
    ※需要あるか分かりませんが、ご要望あれば詳しめに書きます。
    このエントリーをはてなブックマークに追加 mixiチェック

    こんにちは。蛛賢です。
    PropsGamesでRPGを作りました。

    備忘も兼ねて「Zodiac Walk Prologue」の制作手順を投稿します。
    今回は宿屋、道具屋の場面構成です。



    街から宿屋や道具屋の場面に移ります。
    他の店舗系も作りは一緒です。イベント内容もコピペで作れます。

    コピペの注意点としては、画面表示の画像IDだけは使い回せないので、場面毎に画像登録の上、IDを書き換える必要があります。

    ※画像は場面毎に登録を要し、かつ全作品通じた付番のようですので、作品や場面をまたいだ画像IDの使い回しはできないようです。

    宿屋


    ◇宿屋イベント
    <画像表示 ID="548" 透明度="100" 時間="2000" />
    <待機 時間="2000" />  

    <音楽 ファイル="街_PerituneMaterial_Soft_Day2_loop.mp3" ループ="on" フェード="2000" 音量="40" />

    <選択>
    <会話 名前="" 速度="0" >
    1泊10Coinです。<改行 />
    宿泊しますか?<改行 />
    【所持金】<変数表示 変数="共通.int所持金" />Coin
    </会話>
    <選択肢 メッセージ="する" >

    <もしも 条件="共通.int所持金<10" タイプ="数値" >
    <小説 横="中央" 縦="枠中央" 幅="16" 高さ="1" 速度="60" >
    所持金が足りません。
    <クリック />
    </小説>

    <待機 時間="2000" /> 

    <画像表示 ID="548" 透明度="0" 時間="0" />
    <場面移動 移動先="エルティア市街" アニメ="右スライド" />

    </もしも>

    <画像表示 ID="547" 透明度="0" 時間="2000" />
    <画像表示 ID="548" 透明度="0" 時間="2000" />
    <待機 時間="3000" /> 

    <効果音 ファイル="宿屋_きらきら輝く1.mp3" 音量="80" />
    <HP 操作="足し算" 範囲="全体" 値="9999" 時間="1000" />
    <待機 時間="2000" /> 


    <画像表示 ID="547" 透明度="100" 時間="2000" />
    <画像表示 ID="548" 透明度="100" 時間="2000" />
    <待機 時間="2000" /> 

    <計算 結果="int所持金" 式="共通.int所持金-10" />

    <小説 横="中央" 縦="枠中央" 幅="16" 高さ="1" 速度="60" >
    体力が全回復しました。
    <クリック />
    </小説>

    <待機 時間="2000" /> 

    <画像表示 ID="548" 透明度="0" 時間="0" />
    <場面移動 移動先="エルティア市街" アニメ="右スライド" />

    </選択肢>

    <選択肢 メッセージ="しない" >

    <待機 時間="1000" /> 

    <画像表示 ID="548" 透明度="0" 時間="0" />
    <場面移動 移動先="エルティア市街" アニメ="右スライド" />

    </選択肢>
    </選択>


    道具屋と宿屋の作りの違いは、選択肢次第で最初に戻る点です。
    「いらっしゃい」「買う/売る/出る」
     ↓
    「買う/売る」が終わる
     ↓
    「いらっしゃい」「買う/売る/出る」

    これは「<場面移動 移動先="道具屋" アニメ="瞬間移動" />」を入れると簡単に実現できます。


    ◇道具屋イベント
    <画像表示 ID="550" 透明度="100" 時間="2000" />
    <待機 時間="2000" />  

    <音楽 ファイル="街_PerituneMaterial_Soft_Day2_loop.mp3" ループ="on" フェード="2000" 音量="40" />

    <選択>
    <会話 名前="" 速度="0" >
    道具屋です。<改行 />
    何か御用ですか?<改行 />
    【所持金】<変数表示 変数="共通.int所持金" />Coin
    </会話>

    <選択肢 メッセージ="買う" >

    <小説 横="中央" 縦="枠中央" 幅="16" 高さ="1" 速度="60" >
    「すまない、品切れなんだ」
    <クリック />
    </小説>

    <待機 時間="1000" /> 

    <小説 横="中央" 縦="枠中央" 幅="16" 高さ="1" 速度="60" >
    「また来てほしい」
    <クリック />
    </小説>

    <場面移動 移動先="道具屋" アニメ="瞬間移動" />

    </選択肢>

    <選択肢 メッセージ="売る" >
    …中略…

    <小説 横="中央" 縦="枠中央" 幅="16" 高さ="1" 速度="60" >
    「今は買い取れないんだ」
    <クリック />
    </小説>

    <待機 時間="1000" /> 

    <小説 横="中央" 縦="枠中央" 幅="16" 高さ="1" 速度="60" >
    「また来てほしい」
    <クリック />
    </小説>

    <場面移動 移動先="道具屋" アニメ="瞬間移動" />

    </選択肢>

    <選択肢 メッセージ="店を出る" >

    <待機 時間="1000" /> 
    <画像表示 ID="550" 透明度="0" 時間="0" />
    <場面移動 移動先="エルティア市街" アニメ="右スライド" />

    </選択肢>

    </選択>

    取り急ぎ今回はここまで。
    ※需要あるか分かりませんが、ご要望あれば詳しめに書きます。
    このエントリーをはてなブックマークに追加 mixiチェック

    お疲れさまです。蛛賢です。
    PropsGamesでRPGを作りました。



    備忘も兼ねて「Zodiac Walk Prologue」の制作手順を投稿します。
    今回は全体のストーリー・場面構成です。

    PropsGamesでRPGを作るぞ、と決心したら、
    ひとまず全体的なストーリー展開と、場面構成を考えました。
    私は素材の作り込みと併せてPowerPointを用いています。
    (色々ありますけど、何でもいっぺんにできるので個人的に使いやすいです)

    投稿用

    ざっくばらんに、思いつくままに表現していきます。
    ・背景となるストーリー(正直ゲームプレーに必要な内容のみ)
    ・ゲームシナリオ
    ・ゴール

    「Zodiac Walk」のゲームシステムを決める上で、
    簡単にできること、できないことをPropsGames上でも検証しながら進めます。
    ※下の画像は途中のもので、実際の内容と異なるところもあります。

    自由帳


    その後、場面を整理します。
    エルティア市街の【宿】、【店】、【教会】の表現方法については、
    【宿に泊まるか】、【お金が足りるか】、【街に戻るか】といった流れをループにしたいと思ったので、各場面に分割することにしました。
    (場面の最後に「場面【宿】に移る」とすれば簡単にループになる)


    場面


    画像素材、音楽素材を探しながら想像を膨らませながら並行して準備を進めました。

    取り急ぎ今回はここまで。
    ※需要あるか分かりませんが、ご要望あれば詳しめに書きます。
    このエントリーをはてなブックマークに追加 mixiチェック

    お疲れさまです。蛛賢です。

    大変遅ればせながら、第2回 PROPS GAMES コンクールにおいて
    拙作RPG「Zodiac Walk Prologue」が【大賞】をいただきました。

    本当にありがとうございます。



    本作はPROPS GAMESの基本的な標準機能だけで制作したショートRPGです。
    奇抜さというよりかは、至ってシンプルな作りを意識しました。

    ◇あらすじ
    ここは大陸の北に位置する「自由国家エルティア」

    街中で路上演奏をしている少女に出会う

    初めて聴くはずの音色に懐かしさを覚えて声を掛ける

    「ありがとう」と微笑んだ少女は
    金細工のペンダントを渡したのち
    すぐに立ち去ってしまった

    ペンダントには私と少女の名前が刻まれていた
    驚いた私は少女の行方を追うことにした
    フィールドを歩いてはエンカウント、歩いてはエンカウント、の単純操作です。
    制作に割ける時間も限られていたため、今回はプロローグとして1ステージのみとしました。
    今後、新たな機能追加に併せてステージ2以降を追加するかもしれません。

    多少のやり込み要素がありますので、PropsGamesの登録ユーザでログインし、
    オートセーブ有効でプレーされることを推奨します。大体30分くらいでクリアできます。


     


    せっかく大賞をいただいたので、折を見てブログ上で作品を紹介したいと思います。
    まずは報告まで。ありがとうございました。





    【追記:2021.5.4】

    ハチミツ様よりクリア画像をいただきました。
    ものすごくやり込んでいただきました。作者冥利に尽きます。ありがとうございました。

    Zodiac_Walk_Prologue_9
    Zodiac_Walk_Prologue_10

    ハチミツ様の作品も今回受賞されています。
    熱い展開、BGM、そして演出!ぜひプレーしてみてください。


    このエントリーをはてなブックマークに追加 mixiチェック

    ↑このページのトップヘ