集めた仲間によって評価が変わるRPGの作成~全NPCのフラグ(会話、アイテム)と仲間加入イベントの基礎編~

 

集めた仲間によって評価が変わるRPGの作成

~全NPCのフラグ(会話、アイテム)と仲間加入イベントの基礎~


こんにちは、東京経済大学3年のSTです。
前回は、タイトル画面/ゲーム内メニュー/会話選択肢/仲間加入までのコードを仕込みました。
今回の作業では、全NPCのフラグ(会話、アイテム)と仲間加入イベントを仕込んでいきたいと思います。


アイテムの取得例






アイテム使用後例







フラグ・アイテム・仲間加入の「共通仕組み」

状態管理の基本

  • party … 仲間リスト(文字列の配列)

  • items … 所持アイテム名の配列

  • flags … 進行状況を保存するフラグ用オブジェクト(連想配列)

function setFlag(k,v=true){ flags[k]=v; } function hasFlag(k){ return !!flags[k]; } function addParty(n){ if(!party.includes(n)) party.push(n); } function inParty(n){ return party.includes(n); } function addItem(n){ if(!items.includes(n)) items.push(n); } function hasItem(n){ return items.includes(n); } function removeItem(n){ ... } function once(flagKey,fn){ if(hasFlag(flagKey))return false; fn&&fn(); setFlag(flagKey,true); return true; }
  • 仲間加入は addParty("戦士A") のように文字列を push。

  • アイテム取得は addItem("長剣A") など。

噂, rumor オブジェクト

coust rumor = { mazeWarriors_heard: {g1:false,g2:false,g3:false,g4:false}, fighters_info: {grandpaA:false,grandmaA:false,tentGuy:false}, warriorG_info: {guardA:false,guardB:false}, warriorH_info: {villA:false,villB:false}, ... };
  • 複数NPCから噂を聞き終えたかどうかを管理する専用フラグ。

  • allMazeHeard() 等で条件が揃ったかを判定。

  • 条件成立時に

    • 「戦士の証」付与+unlocked_WarriorDEF を立てる

    • 「長剣H」付与 などのイベントを発動。





ステージ別:NPCのフラグ/アイテム/仲間加入まとめ

共通形式

  • 「会話のみ」タイプ
    → フラグ変更なし、ただメッセージを出すだけ

  • 「噂フラグ」タイプ
    rumor.~~ = true; をセット

  • 「アイテム配布」タイプ
    addItem() + 条件チェック

  • 「仲間加入イベント」タイプ
    inParty(), hasItem(), hasFlag() を組み合わせて showChoiceaddParty()

「完了工程」としてできていること

  1. 多マップ構造+境界ワープ+船移動

    • map0〜map11neighborIndex によるステージ切り替え

    • 船/陸の判定、seaTiles / landWalk / boatTiles

  2. NPCシステム

    • ステージ・座標ベースの NPC 配置

    • npcAt() による取得と talk 関数実行

  3. フラグ・アイテム・仲間管理

    • flags / items / party の管理API

    • 噂トラッカー rumor による複合条件イベント

    • 1回きりイベント用 once()

  4. イベントパズル&ルート構成

    • 剣・杖・帽子・ペンダント・槍・鎧・魔術書などが
      それぞれ特定の仲間やボス条件に紐づいている

    • フィールド上の「武具ラック」「木箱」「井戸」などの調べイベント

  5. セーブ/ロード/タイトルメニュー

    • localStorage によるセーブデータ保持

    • タイトル画面・ニューゲーム・コンティニュー

  6. UI

    • メッセージウィンドウ・選択肢ウィンドウ

    • コンパクトなメニュー(仲間・アイテム ミニ一覧付き)

  7. 評価処理の骨組み

    • finalEvaluate() でスコア判定とランク(S/A/B/C)


次の工程(この先の発展案)

今のコードは「探索+会話+仲間集め+フラグ管理」が可能。

ゲームループとしての「エンディング到達」の実装

  • どこか特定マス(本ボス地点)に到達・討伐したタイミングで

    • bossCleared = true を立てる

    • finalEvaluate() を呼んで評価画面を表示

ステータス画面・仲間の説明追加

  • メニューに「仲間詳細」ページを追加して

 BGM・効果音の追加

  • Audio オブジェクトを使って

    • タイトルBGM

    • 港町BGM

    • 井戸やアイテム入手時の SE

操作まとめ(実装版
移動:矢印キー
会話:X / Enter(プレイヤーの正面にNPCがいると発火)
メニュー:Esc(仲間/アイテム/セーブ/タイトルへ戻る)
船の乗降:Z(船タイル上で乗る、陸で降りる)
タイトル:Enter/X=ニューゲーム、C=コンテニュ


参考文献・引用サイト

ぴぽや倉庫
ドット絵世界
DOT  ILLOST
効果音ラボ