水風船。(一切、今回の記事と関係ありません。

冬月 はい、当分
Twitterできない冬月です。どもー

なんでも、
今日(厳密には昨日)発売した「愛しい対象の護り方」が発売されそれに関するTLが増えたせいで
持ってない自分がなんか悲しくなる、っていう変な理由だそうよ
冬華

まあ、自分は我慢してて周りがいろんな事をやってますと、不快な気にはなりますが……
でも、激しいような気がします。Twitterを完全封印は……

設子

冬月 ここのところ、仕事や、ゲーム制作でカリカリしてるんで
八つ当たりしそうで……

冬月 っと、気をとりなおして、今回はプログラム関連です。
2つ目の峠を超えた感じで、もう少しで雛形が完成しそうなのです
意外と早くできそうですねぇ。

製作開始直後は
早くて来年の初めぐらいとか言ってたよね
ただ、雛形が完成するだけなので、ゲームが実際に遊べるまでにはもう少し時間が必要です
冬華

冬月先生の話ですと
シナリオとかグラフィックの工面が出来れば、今年の冬にも出せるかもしれない
とのことですよ。
設子

冬月 ということでー
「続きを読む」からおねがいしますー



冬月 久しぶりのコード晒し。といっても一部過ぎて参考にはなりません。
最近の作業は、C++とLuaスクリプトの連携部分を作ってました。

LuaスクリプトWikipedia

多分、このブログでも書いたと思うけど、
Luaを組み込むことにより、最小限のプログラムを組むだけでシナリオを再現しよう、というのが今回のコンセプトです。
あとはC++言語をゲームシステム部分、Luaにシナリオ部分を分けることにより、作業の効率化も行えます。
冬華

なんで、Luaでやると効率化できるか、というと。
出来ることを予め設定しておけばシナリオのエフェクトや組み立て方が必然と決まってきます
自由度を制限することにより、組立てやすさ、管理のしやすさを高めてるわけですね。
設子

冬月 ただ……
Lua自体がクセモノでして……


--=============================================================================
--void GameMain()
--=============================================================================
--毎回処理を行う場所
--
--=============================================================================
function GameMain()
g_MapPos_x						= 0.0;
g_MapPos_y						= 0.0;
g_MapPos_z						= 0.0;
g_Scenario_Dey					= 13;			--日付
g_Scenario_Infiltration			= 50;			--潜入度(正体がばれているかどうか
g_Scenario_Select_Text[1]		= "選択肢1111";
g_Scenario_Select_Text[2]		= "選択肢2222";
g_Scenario_Select_Text[3]		= "選択肢3333";
--デバック用に修史の衣装を開放しておく
g_Character_CostumeUse[CHARTER_SYUZI] = TRUE;
--=============================================================================
--シナリオが0のとき
if g_Scenario_Pos == 0 then
--指定座標にイベント発生
g_MapPos_x				= 150.0;
g_MapPos_y				= 0.0;
g_MapPos_z				= 0.0;
--イベント発生場所指定
if Treatment_EventDecision(100.0) == TRUE then
g_IsEventScene = TRUE;
else
g_IsEventScene = FALSE;
end
--イベント中
if g_IsEventScene == TRUE then
--ページ送り
-- if g_Scenario_TextBreakNum == 0 then
--デバック用にプレイヤーを移動
g_Scenario_Char_use[CHARTER_AYASE]			= TRUE;			--イベントで使用するのか
g_Scenario_Char_Root_x[CHARTER_AYASE]		= 0.0;			--目的の座標
g_Scenario_Char_Root_y[CHARTER_AYASE]		= 0.0;			--目的の座標
g_Scenario_Char_Root_z[CHARTER_AYASE]		= 1500.0;		--目的の座標
g_Scenario_Char_WaitTime[CHARTER_AYASE]		= 0;			--待ち時間
-- end
g_Scenario_Select = 3;
--選択肢が指定された
if g_GetScenario_Select > -1 then
--次使うために値を戻しておく
g_GetScenario_Select = -1;
end
--セリフの再生が終わった
if g_IsScenario_End == TRUE then
--シナリオ0が終了
g_Scenario_Pos = 1;
g_IsEventScene = FALSE;
end
end
end
return TRUE;
end


はい、コレが実際に今動かしているソースになるよ
あ、今回はプログラムの話はしないつもりだから安心して
たぶん、プログラムをかじった人も、「なんじゃこりゃ」のプログラムだと思います。
冬華

PythonとかRubyを使っている人はもしかしたら読めるかもしれませんね。
ただ、C言語系からきた冬月先生はもうチンプンカンプンだったそうです。

設子

ちなみに、コメントの多いソースなだなぁ、とか思う人もいると思いますが。
冬月は基本的に作ったソースの中身は一切覚えない人なので、あとで修正するときとかに困らないように
多少多めの情報を残しておきます。

冬月 このプログラムで
イベントの発生、イベント移動を行えるようになってます。
で、ここから、画像を使って説明しますです。

お決まりのロード画面です。
何気に2タスクの処理(2つのプログラムを同時進行)してて、中級プログラムです。

冬華

そして、少し前に悩んでいたフェード処理です。
前にも話しましたが、このフェード処理はAXLさんの処理のほぼ同じ動作するようになってます。
PSPをパソコンで動画保存して何十回も再生してどんな動きか研究してたそうですよ。
設子

冬月 追加点その1。
右上のウインドウに数値が追加されました。まだ位置の微調整が必要ですね。
あの数字は、Luaからのデータを反映させています。

変更点その2
イベント時のテキスト表示で自動改行するようにしましたー
これで天元突破しなくなりましたが、表示文字数を超えてしまうと、文章が切れてしまいます
冬華

そ、そして!その3!
選択肢の制御ができるようになりましたー
といっても、こうのようなキャラクターがメインのゲームでは当たり前の機能ですよね
設子

冬月 そして、その4
イベント時の強制移動ができるようになりました。
イメージとしては、ポケモンの初めのNPCに案内されて動くアレです。


その5!? このゲームのキモである
変装機能が実装されましたー
今はデバック用として正門前で堂々と着替えてますが、パラメーターとか調整してゲーム性を高めていく必要があるね
冬華

といった感じですね。ここで打ち明けると
初め想定した機能はもうほぼ実装済みになりました。
あとは、今の仕様からどう発展させていくか、の問題です。
設子

冬月 実はいろいろ考えていたりしてます。
ただ、それが形に出来るかはまだ不明です。
ゴールが見えてきたけど、まだ遠いです

気軽にコメントをどうぞ!

この記事に関すること冬月に聞きたいこと等、小さいことでもコメントしていただける嬉しいです。
冬月に直接連絡したい方は下のお問合せフォームをお使いください。(メール送信されます)

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。
※メールアドレスは公開されることは有りません。


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

ゲーム製作の関連記事