v1.2.2 (2026-02-11)
- 鹿児島県NPCのクイズ内容にヒントを追記
v1.2.1 (2026-02-11)
- クイズパートの変更
- C6-0を入手するときのクイズパートのGUIに統一
- 正規ルートで一回ゲームクリアまでテスト済み
v1.2.0 (2026-02-10)
- 山口県に隠しルート追加
- 山口県左上部(36,116)に新規NPCを追加
- 話すとすべてのアイテムを入手し、鹿児島県のエンディングNPC付近へ遷移し、クリアが可能
dialogue.json新規NPC "npc_yamaguchi" を追加- NPC画像ファイル
npc_yamaguchi.pngを追加(出典は他のNPCと同様) common.jsonに "secret_route" を追加
v1.1.2 (2026-02-10)
- 操作方法を十字キーに変更
- 画面左上部のUIに移動の説明を追加
v1.1.1 (2026-02-10)
- 最終エンディング画面の "ending(demo).png" を "ending.png" に差し替え
- ノベルパート "ending" 用に "tanegashima_center.jpg" を追加 (出典はphoto AC)
v1.1.0 (2026-02-10)
- 問題文改行機能の追加
talk.pyの問題文表示の部分に、改行して表示する機能を追加dialogue.jsonの "question" を読み込む際に、 "\n" で改行をするように
- 新規クイズの追加(テキスト入力形式問題)
- 各マップのNPCが出題するクイズの最後に、テキスト入力形式のクイズを追加
- 問題数の増加により、npcの会話を一部修正(3問→4問)
- 各分野の最終問題に行く際の文言を追加(「次が最後の問題だ。」等)
- "npc_text_quiz"(テキスト入力問題確認用のnpc)を消去
v1.0.0 (2026-02-10)
- リリース
- ドアの追加
- 九工大の入り口出口両方に目印を設置
- クイズシステムの追加
- テキスト入力形式(今回は半角数字のみに限定)のクイズを追加
talk.pyのクイズ処理を三択問題とテキスト入力形式で分岐するように- "quiz_type" を "text"(テキスト入力問題), "choice"(選択問題)で区別
- 入力は10文字まで、backspace で削除、z で決定
utils.pyに (0,1,2,3,4,5,6,7,8,9,backspace,period) を追加dialogue.jsonに "npc_text_quiz"(テキスト入力問題確認用のnpc)を追加
- ゲームタイトルから「Demo ver」を消去し、タイトルを修正
v0.42.2 (2026-01-27)
- 新規NPC画像の追加
npc2.pngの画像ファイルを老人(青)から中年男性(青)に差し替えnpc3.pngを中年男性(緑)に差し替えnpc4.pngを老人(緑)に差し替え- 出典は以前の npc と同様
- クイズ出題前の会話を追加
- 若松の座標を追加
- タイトル画面に「THE JOURNEY TO ROCKET LAUNCH ~YOU CAN (NOT) TRY AGAIN~ Demo ver」を表示
- "Tiny quiz field" を "THE JOURNEY TO ROCKET LAUNCH" に差し替え
- エンディング方法の追加
ending(demo).pngの追加(title.jpgに編集を加えたもの)map.jsonに "ending" を追加- デモ版のエンディングでは、ノベルパートの "ending" を先に流した後
マップ遷移してending(demo).pngの画像の上をプレイヤーが動き回ってもらう形に common.jsonの "ending" に「―――END――― YOU CAN (NOT) TRY AGAIN」を追記
- NPC の移動
- クイズ NP を各マップに移動
- マップ遷移 NPC を各都道府県の観光名所等の近くに移動
- NPC の会話セリフをゲーム風に修正
- NPC の移動に合わせて目標UIも修正(座標、場所名を追加)
- プレイヤーのスタート地点を (214,109) に変更
dialogue.jsonの鹿児島県のクイズ NPC に会話追加dialogue.jsonのエンディング NPC5 に "map_trigger":"ending" を追加- 目標 UI の改良
- 画面左上部に表示する目標 UI を所在マップに応じて、変化するように改良
talk.pyの required_items の修正- v0.40.0 では、次のマップへ移動するために、次のマップのアイテムが必要という状態になっていたため修正
- "maptrigger":"aichi"(愛知県へ飛ぶ) の時、 "required_item":"model_rocket_engine_c6_0"(福岡県のアイテム) のように "maptrigger" と "required_item" が一つずれるように修正
talk.pyの "required_items" に "ending" を追加し、"kagoshima_engine_unit" をもっていれば、エンディングが流れるように
- npc と会話し次のマップへ移動する際に、特定のクイズ報酬アイテムを持っていないとマップ遷移できないように
talk.pyの_finalize_conversationに "rquired_items" を追加し、それぞれの NPC に対応した必要アイテムを取得- 必要アイテムを持っていない場合は、「『必要アイテム名』を持っていないと進めないぞ。」と表示
- 必要アイテムを持っていれば、そのままマップ遷移するように
- クイズシステムを改良し、複数出題してすべて正解すれば報酬が獲得できるように
dialogue.jsonの NPC "quiz" をリスト化(複数問に)talk.pyのクイズ処理を、クイズが単問の場合、複数問(リスト)になっている場合で条件分岐- 複数問の場合、すべて正解したときに報酬をゲット、間違えると最初の問題からになる。
dialogue.jsonに、npc1,2,3,4 が出題する問題を追加し、各分野3問ずつに
- 新規マップ(鹿児島県種子島)の追加
world_map_kagoshima.pngを追加(他の都道府県マップと同様の出典)maps.jsonに "kagoshima" を追加common.jsonに "kagoshima_trip"(茨城県→種子島宇宙センターへ移動するノベルパート)を追加
- npc12,13の追加
- npc12を茨城県に配置(話しかけると茨城県→種子島宇宙センターへ)
- npc10を鹿児島県種子島宇宙センターに配置(話しかけると種子島宇宙センター→茨城県へ)
- 画像ファイル
npc12.png,npc13.pngは他の NPC と同様
- NPC の整理
- npc1,2,3 クイズ内容と、PR#87 で追加された、npc_aichi 等の会話内容をジャンルごとに整理
dialogue.jsonに記載する NPC の順番を- NPC1~4: クイズを出題する NPC 構造系→制御系→通信系→推進系
- NPC5: エンディングを流す NPC
- NPC6~11: マップ遷移する NPC に整理
npc11.pngを追加(他の NPC と同様の画像)- npc1 の移動を停止
- マップ名表示
- 全体マップを開いた際に、マップ名が右上部に表示されるように
map.jsonにマップごとの "name"(マップ名:福岡県など)を追加field.pyのload_mapにself.current_map_nameを追加し、所在マップ名を取得field.pyのdrawで都道府県名を右上部に白文字で表示する
- feat(system): 目標テキスト(Objective)に具体的な座標情報を追加
- プレイヤーが迷わないよう、次に向かうべき場所やNPCの座標(九工大: 214,104、NPC1: 190,108等)を明示するように変更
- 九州工業大学
- npc
- npc の順番で現在はストーリー進行
- ノベルパートの GUI 化および機能拡張
- システム面
- 選択肢をボタン形式のGUIに変更(マウス/キー操作対応、フォーカス表示)
- マウスホバーによるハイライト機能の実装
- 背景画像・立ち絵のスケール調整(
char_scale)および位置調整(char_offset_y)機能を実装 - シナリオデータの実装構造を変更(古い
novel_scripts.jsonを廃止し、ディレクトリ一括読み込みへ)
- シナリオ・アセット
- 九工大イベント(
kyutech.json)の実装(先生との会話、クイズ、アイテム入手) - イベント用背景画像(
cupping.png)、先生立ち絵(Professor2.png)の追加
いずれもフリー素材です - アイテム入手演出の強化(
C6-0画像を表示)
- 九工大イベント(
- システム面
dialogues.jsonにおいて各都道府県NPCのひな形を作成
- マップ遷移できないバグを修正
- v0.33.0の機能追加で
talk.pyの_finalize_conversationが二度定義されていたため、修正
- v0.33.0の機能追加で
src/app.pyにおけるミキサー初期化順序の変更
- マップ表示機能の追加
- mキーでマップを開けるように
self.map_displayをfield.pyに追加:プレイヤーの所在マップが縮小表示され、場所は赤い円で表示- マップを開いている間は、移動、会話ができないよう
field.pyに追記 - 画面左上部の操作ガイドに"M:マップを開く"を追加
- クイズ正誤判定テキストウィンドウの追加
src/core/talk.pyにクイズ結果表示モードを追加- 正解・不正解および獲得アイテムを1行ずつ表示する機能の実装
- 会話システム変更に伴う
src/app.pyの安定化処理Talkクラスの仕様変更(メソッド名の変更等)に伴う呼び出し箇所の修正- 存在しない属性へのアクセスによる AttributeError の修正
- BGM が鳴らないバグの解消
src/main.pyにinit_audio()関数を追加- OS 毎にミキサーを初期化
- 初期化順序の変更
- オーディオ環境の初期化 ->
Appクラスの初期化
- オーディオ環境の初期化 ->
src/main.pyの例外処理の改善
- 新規マップ(茨城県)の追加
world_map_ibaraki.pngを追加(他の都道府県マップと同様の出典)maps.jsonに"ibaraki"を追加novel_scripts.jsonに "ibaraki_trip"(神奈川県→茨城県へ電車で移動するノベルパート)を追加
train.pngの追加(電車で移動する場合ノベルパート用画像)出典はAI PICT- npc9,10の追加
- npc9を神奈川県に配置(話しかけると神奈川県→茨城県へ)
- npc10を茨城県に配置(話しかけると茨城県→神奈川県へ)
- 画像ファイル
npc9.png,npc10.pngは他の NPC と同様
- 新規マップ(神奈川県)の追加
- world_map_kanagawa.pngを追加(他の都道府県マップと同様の出典)
maps.jsonに"kanagawa"を追加novel_scripts.jsonに "kanagawa_trip"(神奈川県へ移動するノベルパート)を追加
- npc7,8 の追加
- npc7を愛知県に配置(話しかけると愛知県→神奈川県へ)
- npc8を神奈川県に配置(話しかけると神奈川県→愛知県へ)
- 画像ファイル
npc7.png,npc8.pngは他の NPC と同様
- 画像ファイル
- プレイヤーの表示のずれにより、マップの当たり判定がずれてしまう不具合を解決
- 愛知県へマップ遷移時に、福岡県左上部に飛んでしまう不具合を修正
- 不具合の詳細:npc5に話しかけるとノベルパートが開始し、終了時に
start_rpg_game()が呼ばれることで愛知県へのマップ遷移が上書きされていた。 talk.pyの map_trigger を novel_trigger の前に変更- 話しかけた NPC に novel_trigger がある場合、マップ遷移を一時中断(stop_map_transition)してノベルパートを開始
- ノベルパート終了時に
app.pyのstart_rpg_game()を呼び出して、マップ遷移が一時中断(stop_map_transition)されていれば、マップ遷移を再開する構造に変更
airplane.jpgの出典をREADME.mdに記載
- npc5,6の追加
- npc5を福岡県の座標(200,95)に追加(話しかけると福岡県→愛知県へ)
novel_scripts.jsonに愛知県へ向かうノベルパート "aichi_trip" を追加
- npc6を愛知県の座標(69,78)に追加(話しかけると愛知県→福岡県へ戻る)
- 画像ファイル
npc5.png,npc6.pngは他のnpcと同様
- npc5を福岡県の座標(200,95)に追加(話しかけると福岡県→愛知県へ)
airplane.jpgの追加(飛行機で移動する場合のノベルパート用画像)出典は photoAC- new_map(愛知県)の追加
world_map_aichi.pngを追加(出典は他マップと同様)map.jsonに "aichi" を追加
- map_trigger の追加
- novel_trigger と同様に、
talk.pyに map_trigger を追加 dialogues.jsonの NPC データに map_trigger を追加(話しかけて会話が終了すると対応した map へ遷移する)
- novel_trigger と同様に、
- 会話終了時の更新処理で keys が未定義になる不具合を修正
- クイズ正解時に会話が正しく終了せず、プレイヤー操作が復帰しない問題を修正
- 画像のファイル分け
assets └── img ├── character/ ├── map/ └── story/
- マップ遷移アニメーションの追加
field.pyのdraw()に遷移アニメーション描画コードを追加- マップ遷移時にアイリスイン・アウトのアニメーションが表示されるよう実装
- マップ(山口県)の追加
world_map_yamaguchi.png(3720×2840)の追加(出典は福岡県マップと同様)- 福岡県の北部の橋:座標 (230,83) を渡ると、マップが山口県に切り替わるように
map.jsonに"yamguchi"を追加し、マップ遷移の入口・出口を管理
- BGM 再生不具合の修正(macOS 対応)
- SDL_AUDIODRIVER に Windows 専用の
directsoundを強制指定していた処理を削除 - OS ごとのデフォルトオーディオドライバを使用するよう修正
- mixer 初期化失敗により BGM が無音になる問題を解消
- SDL_AUDIODRIVER に Windows 専用の
以下のようにリファクタリングを行った。
- マップロード処理の抽象化
- データの読み込み、タイルの構築、NPCの配置を独立したメソッドへ分離し、構造を整理
- タイル描画の最適化
- 画面外のタイルを描画しないカリング処理の基盤を整備し、パフォーマンスを向上
- プレイヤー移動ロジックの改善
- 移動方向と衝突判定の計算を整理し、タイルベースの移動をより正確に制御
- NPC・オブジェクト管理
- マップデータから動的にNPCを生成し、会話イベント(
Talkクラス)と連携する仕組みを強化
- マップデータから動的にNPCを生成し、会話イベント(
- 座標変換の定数化
- タイルサイズ等のマジックナンバーを排除し、レイアウト調整を容易に変更可能に
- 目的管理のデータ駆動化
- 進行状況に応じた目標テキスト生成を辞書データに基づいたロジックに変更し、拡張性を向上
- エラーハンドリングの強化
- セーブ/ロードおよびBGM再生時の例外処理を追加し、ログ出力を詳細化
- BGM制御の堅牢化
- pygame.mixer の初期化状態を
get_init()で明示的に確認する処理を追加 - mixer 未初期化状態での再生要求を防止し、無音状態になる不具合を解消
- BGM 再生処理の呼び出し順序を整理し、初期化完了後にのみ再生されるよう修正
- pygame.mixer の初期化状態を
- 状態遷移の明確化
- 通常会話とクイズモードの切り替えロジックを整理
- 報酬処理の適正化
- NPCからの報酬付与およびノベルトリガーの判定を独立したメソッドへ分離
- 入力ガードの改善
- 誤操作防止用の
wait_frames処理を各遷移ポイントへ適切に配置
- 誤操作防止用の
- 描画ロジックの効率化
- クイズ選択肢の描画をループ処理に変更し、コードを簡略化
- 画像キャッシュの実装
- 背景および立ち絵を
_image_cacheで管理し、重複ロードによる負荷を軽減
- 背景および立ち絵を
- レイアウト定数の導入
- 画面サイズや描画位置を定数化し、デザイン変更を容易に
- リソース読み込みの改善
- パス解決を
utils.pyと共通化し、配布環境でのパスエラーを防止
- パス解決を
- リソース管理の整理
_load_resourcesメソッドを新設し、フォント、画像、サウンドの初期化ロジックを分離
- 描画ロジックの分割
- シーンごとの描画処理を
_draw_title,_draw_game,_draw_inventoryに分割し、可読性向上
- シーンごとの描画処理を
- イベントハンドリングの整理
- RPGパートの入力処理を
_handle_game_eventsへ集約
- RPGパートの入力処理を
- インベントリ制御の改善
- 開閉時のSE再生を含めたトグル処理をメソッド化
- オーディオ初期化順序の修正
- pygame 初期化後に mixer を明示的に初期化する構成へ変更
- 初期化完了前に BGM 再生処理が走らないよう制御を追加
- ウィンドウ描画の高度化
- アルファチャンネル(透過)に対応し、背景が透けるモダンな UI 表示に変更
- 描画汎用性の向上
- パディングや枠線幅を共通定数として管理
- KeyTrackerの最適化
- 追跡対象キーをクラス定数化し、毎フレームの辞書生成コストを削減
- Pathlibへの統一
- パス操作を
os.pathからpathlib.Pathに刷新し、プラットフォーム間の互換性を向上
- パス操作を
- ファイル操作の安全性
save_json実行時に保存先ディレクトリを自動生成する機能を追加
- 配布用パス解決の改善
- PyInstaller環境下でのリソースパス解決ロジックをより堅牢に変更
- BGM ファイル読み込みのパス指定を修正しました
__init__関数内で定義されていた内部関数を廃止しクラスのプライベートメソッドとして独立- また、フォントやタイトルの画像読み込み処理における条件分岐を整理
assets/fonts/NotoSansJP-Regular.ttfの追加- 実行ファイル作成時に必要です
- 上記フォントファイル追加に伴い、
src/app.pyのフォント設定コードを変更
data/novel_scripts.jsonに最低限のストーリー追加assets/img/npc4.pngに仮画像を追加dialogues/dialogues.json最低限のクイズを定義
WASDで移動するように変更- 選択は矢印キーのまま
src/core/talk.pyに以下の機能を実装・整理- 会話状態とクイズ状態の分離管理
- クイズ中の入力処理ロジック追加
- クイズ報酬の一度きり取得処理
- 会話・クイズ終了後の待機フレーム導入
- NPC に
novel_triggerを設定することで、会話後にノベルパートへ遷移可能に変更
talk.pyに_check_novel_trigger()を追加- NPC に話しかけると novel パートに切り替わり、対応した novel が開始するような機能をもつ
app.pyのstart_gameでゲーム開始時 ending が始まるのを opening に変更novel_scripts.jsonの ending パートを追記(まだ完成はしていない)dialogues.jsonの NPC データに、novel_trigger を追加した NPC3 を追加- novel_trigger に novel_scripts の章名(opening など)を記載することで対応した novel が開始する
- 画像ファイル
control_room.png,np3.png,tanegashima_rocket.jpgの追加
- 操作説明の表示
Happy NewYear! 時間がないのでVibe Cordingでいきます
- Create Kyutech Campus
- 座標(214,104)にKyutech Campus への移動ポイントを作成
- 遷移先は仮画像として
title.jpgを指定しています
- フラグの設定
ゲームの進行状態を示すためにフラグを設定します
- ui.pyで画面上部に次の目的地を示す
- system.pyに次の目標をハードコードで書いておきます
- 出典の補強
- mp3の追加
- Youtube Audio Libraryからの引用は安全
- 会話終了時の自動クローズ機能の追加
- 最終行でZキーを押下した際、およびクイズ回答直後に
_close_dialogを呼び出す - これにより、ウィンドウが自動的に閉じるように修正
- 最終行でZキーを押下した際、およびクイズ回答直後に
- 会話ループ(再発火)の防止
_close_dialog実行時にwait_frames(クールタイム)を設定try_talkでの重複検知を抑制することで、会話が無限に繰り返される問題を解消
- 動的なウィンドウ配置
- 画面サイズに基づき、画面下半分の中央にウィンドウを配置する計算ロジックを追加
- 報酬処理の整理
- 通常会話終了時の報酬付与(
_process_npc_reward)とクイズ正解時の報酬付与を分離 - データ構造に即した確実な報酬付与と重複削除を実現
- 通常会話終了時の報酬付与(
- is_active の判定ロジック
self.activeの有無のみで判定するよう簡略化し、状態管理の整合性を高める
-
画像の追加
NASAの画像を使います。以下の項目さえ守っていれば、使用はだいぶ緩そうです。JAXAの画像はやめましょう。利用するのに毎回申請が必要であるし、規制が厳しいです。
- NASAの丸いロゴは載せないこと
- NASAとの共同開発のような印象を与えない事
- 出典としてNASAを明記すること
-
data/storytext.mdの追加
- ストーリー展開を書いたものです。Copilotにソースコードを出力させるときなどに使って下さい。
-
Endingシーンの作り始め
- app.pyのstartgame関数の
self.vn.start("ending")のending部分を変えてください - 現在はオープニングをコメントアウトしています
- Ending用のnovel_scripts.jsonを追加
- app.pyのstartgame関数の
- 【重要】マップ画像サイズの制約
- 新たにマップ画像を追加する際、画像の縦横ピクセルサイズは必ず10の倍数にする必要があります
- タイルサイズ (
TILE = 10) との整合性を保ち、端数による累積的な座標ずれを根本的に防止するため - 詳しくは Issues #56 で
- サンプリング範囲の拡張
- 従来の1ピクセル(タイル中心)のみの判定から、中心部3×3ピクセルの近傍サンプリング方式に変更
- これにより、画像のわずかなノイズや境界線の影響による誤判定を抑制し、移動の安定性を向上
- 色判定アルゴリズムの更新
- 海の基本色
(0, 95, 255)に加え、波や波打ち際の表現(0, 143, 239)を許容するよう判定範囲を最適化 - 青成分の閾値を厳密に定義することで、他の青系統のタイルとの誤認を防止
- 海の基本色
- 垂直オフセット(
Y_OFFSET)の導入- マップ全体が下方向にずれている現象に対応するため、判定座標を一律に補正するパラメータを追加
- 累積誤差補正(
Y_DRIFT)の導入- 累積誤差を解消するため、
Y座標に比例した動的な補正計算式を追加
- 累積誤差を解消するため、
-
visual_novel.pyの新規作成-
VisualNovelクラスの実装、以下の管理- 背景
- 立ち絵
- テキストウィンドウ
-
VNはVisual Novelの略
-
シーン定数の定義
他の画面を実装したくなったらstate定数をここで与える
SCENE_TITLE=0:タイトル画面
SCENE_GAME=1:RPG画面...etc.
-
-
app.pyの変更- 関数コメントの追加
-
novel_script.jsonの新規作成bgとcharは指定していなければ、前の状態が維持されます。立ち絵を消したい場合は、"char":"none"を指定する- text:会話の内容を書く
- bg:背景ファイル名
- char:立ち絵画像ファイル名
maps.jsonでの衝突判定を廃止- これに伴い
make_collision.pyを削除
- これに伴い
- 定数
TILEを 16 から 10 へ変更 - 表示倍率を制御する定数
ZOOMおよびZ_TILEを導入 - 描画中心座標
SCREEN_CENTER_XおよびSCREEN_CENTER_Yを App クラスの解像度(900x700)に合わせて更新 - 海判定(移動不可判定)ロジックを移動先タイルの中心1ピクセルのみを参照する方式へ簡略化
load_mapメソッドに、描画負荷軽減のための事前拡大イメージmap_image_zoomの生成処理を追加load_playerメソッドに、プレイヤー画像の事前拡大処理を追加し、画像不在時の代替サーフェスサイズをZ_TILEに同期- draw メソッド内の描画計算式を、タイル座標に
Z_TILEを乗算し ZOOM 加味のオフセットを加算する形式へ刷新 - プレイヤーの描画位置を画面中央に固定し、マップ側がスクロールする描画仕様へ変更
- NPCの描画および移動オフセット、ラベル表示位置を拡大率に合わせて再計算するよう修正
- 画面遷移(トランジション)の円の描画位置と速度を拡大後の画面サイズに合わせて調整
- 従来の「タイル中心ピクセル基準」を廃止
- プレイヤーの足元位置を基準点として海/陸判定を行う方式に変更
- 単純な 3×3(9点)の同一重み多数決を廃止
- 重み付き投票方式を導入
- 足元直下を最優先
- 左右および直上を中優先
- 斜め方向を補助的扱い
- 海判定ロジックを 単一ピクセル判定 から 多数決方式 に変更した。
- 各タイルについて、**中央を含む 3×3 ピクセル(計 9 ピクセル)**を対象にする。
- 9 ピクセルのうち 半数以上(5 以上)が海色の場合のみ、そのタイルを海と判定する。
- visual_novel.pyの新規作成
- app.pyの変更
- novel_script.jsonの新規作成
会話の内容を書く
- NPC ごとに表示画像を指定できる仕組みを追加
assets/dialogues/dialogues.jsonにimageフィールドを追加することで、NPC 画像ファイル名を指定可能- NPC 画像を
assets/img/から読み込み、描画する処理を追加しました - NPC の描画方法を、矩形描画から画像描画に変更
- NPC を示すための固定色矩形描画処理を削除
assets/内の素材の変更
| 使用箇所 | 出典 |
|---|---|
| プレイヤー | https://pipoya.net/sozai/terms-of-use/ |
| タイトル | https://aipict.com/terms-of-use/ |
| 福岡県マップ | https://rpgmap.hatenablog.com/ |
| マップ BGM | https://dova-s.jp/ |
| 効果音 | https://soundeffect-lab.info/ |
- 所持アイテムの欄と、座標の表示を重ならないようにしました
- NPCと話しただけでitemがもらえる機能追加
- npc2でpart1を入手
- rewardを
[item1],[item2]のようにリスト形式に - itemの重複取得禁止
NPCからitemを取得したら、json上のデータをdeleteすることで、二回以上話しかけてもアイテムの重複取得が行われないようにする
src/utils.pyにresource_path関数を追加し、PyInstaller 実行時にファイルが見つからない問題に対応app.pyおよびfield.py内でBASE_DIRをresource_path("assets")を利用する形に変更- BGM 再生処理を
resource_pathを経由してファイルパスを取得するよう修正- 画像や JSON など外部リソース読み込み箇所も同様
docs/に免責事項を追加
- NPC_1のみが左右に動くように
- 移動させるかどうか,速度(speed),距離(max_offset),はdialogues.jsonでNPCごとにパラメータ管理
- 移動方向はfield.pyのscreen_x,screen_yの部分で管理
- 現在は左右移動のみ、今後はNPCごとに異なる動きを実装予定
- バージョン表記方法の変更
src/下のファイルにおいて、相対 import を絶対 import に変更src/__init__.pyを追加- 空ファイルだが、実行時に必要なので削除しないこと
- 実行ファイル化のために必要です
- マップごとの BGM 管理機能の追加
assets/data/maps.jsonの各ワールドのキーにbgmを追加し、BGM ファイルを指定する。- BGM ファイルは
assets/sounds/にあるという前提
- BGM ファイルは
- NPC に話しかけられないバグの修正
- NPC の四近傍にいて、かつ、
Zキーを押したときにのみ会話を開始するようにした
- NPC の四近傍にいて、かつ、
assets/dataのフォルダ作成- 画面左上に現在の座標を表示
field.pyを大幅に書き換え、json をもとに map 遷移するアルゴリズムへ
- BGM 追加
- BGM ファイルは
assets/sounds/に入れる
-
フォルダ構造の変更
フォルダ構造を表示する
PBL-Game ├── assets │ ├── dialogues │ │ └── dialogues.json │ ├── img │ │ ├── player_back.png │ │ ├── player_front.png │ │ ├── player_right.png │ │ ├── title.jpg │ │ ├── transition.jpg │ │ └── world_map.png │ └── sounds │ ├── chestclose.mp3 │ └── chestopen.mp3 ├── src │ ├── core │ │ ├── field.py │ │ ├── system.py │ │ └── talk.py │ ├── app.py │ ├── main.py │ ├── ui.py │ └── utils.py ├── .gitignore ├── CHANGELOG.md ├── LICENSE └── README.md -
タイトル画像のファイル名を変更 ;
960.jpg->title.jpg -
assets/フォルダを追加し、ここにimg/,sounds/,dialogues/dialogues.jsonを移動 -
src/にソースコードを移動 -
NPC 描画サイズを調整できるように修正
-
dialogues/dialogues.jsonの NPC 座標を 2 要素形式に変更 -
field.py,talk.py内の NPC 表示・会話処理の修正 -
実行方法変更 ;
python -m src.mainで実行
- プレイキャラクターの画像を移動方向に合わせて表示
player_front.png,player_back.png,player_right.pngのプレイキャラクターの前後左右画像を追加player1.pngキャラクター仮画像の削除
- プレイキャラクターの画像表示
player1.pngプレイヤー画像(仮)の追加(移動時の方向に合わせて、前後左右のキャラ画像に変更予定)- キャラの解像度に合わせてタイルサイズを16に一旦変更
- 効果音追加
- 音源は
sounds/で管理
- ワールド遷移時のアイリスアウト、アイリスインのアニメーション追加
- field.pyの変更
- 画面のサイズをでかく(キャラクターの解像度が決まり次第タイルサイズを変更予定)
- キー押下で連続移動できるように変更
self.speedは移動速度を変更できる
offsetは1タイル分のピクセル数、TILE=60と定義されているなら1マス60px、offset+=self.speedとしているのでspeedを変化させると移動速度が上がる
- ワールド遷移の実装
- 画面外に出られないように
- 移動時のカクツキを解消
- 全体マップ(世界地図)アセットの追加
img/フォルダにworld_map.pngを追加- プレイヤーを中心に世界地図がスクロールするように
- 起動画面の追加
img/フォルダの追加(画像ファイルはここに追加し、参照するように)
- ゲームエンジンを
Pygameに変更
- 起動不能バグの修正
README.mdの加筆修正、日本語化
assets.pyxresの追加k8x12S.bdfの追加
CHANGELOG.mdの日本語化- コードの説明を追加
- 将来的なテクスチャ、BGM 追加に対応
| 種類 | 対応箇所 | 備考 |
|---|---|---|
| プレイヤー表示 | core/field.py 内 # プレイヤー描画 |
px.blt(56, 56, 0, 0, 0, 16, 16, 0) |
| NPC 表示 | core/field.py 内 # NPC描画 |
px.blt(screen_x, screen_y, 0, 16, 0, 16, 16, 0) |
| タイルマップ | core/field.py 内 # 将来的なアセット対応 |
px.bltm() 利用 |
| BGM | core/system.py |
px.playm(track_id, loop=True) |
| SE | core/field.py,core/talk.py |
px.play() を適宜挿入 |
BGM
| 機能 | 実装箇所 | 備考 |
|---|---|---|
| BGM再生 | System.play_bgm() |
px.playm(track_id, loop=True) を有効化 |
| BGM停止 | System.stop_bgm() |
px.stop() を有効化 |
| 歩行音 | Field.start_move() |
px.play() を追加 |
| 会話開始BGM切替 | Talk.open_dialog() |
self.app.system.play_bgm(track_id) |
| クイズ正解/不正解SE | Talk.update() |
px.play(3, 2) / px.play(3, 3) |
/src以下を大幅に変更し、新たなテンプレートに置き換え
src/main.pyに https://github.com/shiromofufactory/pyxel-tiny-drpg から引用src/sample.pyを削除
- リファクタリング
pyxelのサンプルを追加
- リポジトリ作成
- プロジェクト開始