【C++】ノベルゲームのスクリプト - その1

現在ノベルゲームのエンジンを作成中。

それにあたっていちいちソースコード側でメッセージや画像を切り替えるのは汎用性に欠けるからゲーム本体に実装するための外部スクリプトを作れたらいいなぁ、と思い実装方法を考えてみた。

 

まず、スクリプトに必要なデータ。

・発言者

・表示メッセージ

・背景(のパス)

・キャラ絵(のパス)
・BGM(のパス)
・効果音(のパス)

まぁ、こんなところかな。

実際には効果音不要の場合があったり、キャラ絵にも表示位置などがあったりするからもう少し複雑になるけど、今回は構想を纏めるだけなので割愛しよう。

 

ふむ。

必要なデータはどのシーンでも共通だ。

となるとスクリプト構造体を定義し、その配列で管理するのがベター。

素数は原稿の長さに依存するのでnewを利用して動的にメモリを確保する。

 

struct Script{

    char* Name;
    char* Message;
    int BGIHandle;
    int PersonHandle;
    int BGMHandle;

};

Script *p = new Script;

 

こんな感じにして受け手を確保してあげればいいんじゃないかなぁ......

これでメインフレームでの描画ループのカウンタを、ロードする構造体の要素数に当てていけば運用しやすくなる(ハズ)

 

ただ、このままだと各要素の代入は手打ちになるから外部で作成した意義があるとは言えそうにない。

 

次回はこの構造体に外部ファイルからデータを読み込む方法を考えようと思う。

2014/11/13 Thu.

環境パス設定。

本日の部活であった出来事。

 

開発環境

・OS:Windows8(64bit)

キーボード:JIS配列

コンパイラBorland C++ Compiler 5.5

・エディタ:Tera Pad

 

部員T「C++でグラフィック処理したいんだけど、どうすれば出来る?」

俺「***.rcファイルで管理してwindows.h使うか、DxLib.h使うかかな。弄ってみた感じは後者」の方が簡単かな」

 

〜数分後〜

T「大体サイトと同じようにやったはずなんだけど何かエラー出とる......」

 

PC交代して作業スタート

まずソースコード

#include <stdio.h>

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){

    if(DxLib_Init() == -1)

         return -1;

    else

        MessageBox( NULL, "DxLib初期化完了", "Debug", MB_OK);

    return 0;

}

ソース自体は改変してあるものの

・初期化に失敗したら強制終了

・初期化に成功したらメッセージボックスを表示して終了

といった仕様で特に問題はない。

 

続いてコンパイル

GUIアプリケーションだから -W

とりあえず警告は一旦無視するため -w-

実行。

 

bcc32 -W -w- dx_sample.cpp↵

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

エラー E2209 I:\pcclub\T\prog\dx_sample.cpp 2: インクルードファイル 'DxLib.h' をオープンできない
エラー E2141 I:\pcclub\T\prog\dx_sample.cpp 4: 宣言の構文エラー
*** 2 errors in Compile ***

 

** error 1 ** deleting Debug\dx_sample.obj

 

Make End !!

 

なるほど。

どうやらヘッダファイルのインクルードに失敗している模様。

bcc32.cfgを確認すると

-I"I:\pcclub\T\borland\bcc\bin\Include"
-L"I:\pcclub\T\borland\bcc\bin\Lib; I:\pcclub\T\borland\bcc\bin\Lib\PSDK"

 

一見、問題が有るようには見えない。

そこで環境パス設定について調べてみた。

 

すると、

「""で囲んであればフォルダ名に空白を含んでも問題無い。」

これが実は問題だったのだ。

どうやら2行目の後半が

「I」ドライブではなく、

「 I」ドライブ(Iの前に空白有り)として読み込まれていたようだ。

 

というわけでbcc32.cfgを

-I"I:\pcclub\T\borland\bcc\bin\Include"
-L"I:\pcclub\T\borland\bcc\bin\Lib; I:\pcclub\T\borland\bcc\bin\Lib\PSDK"

から
-I"I:\pcclub\T\borland\bcc\bin\Include"

-L"I:\pcclub\T\borland\bcc\bin\Lib;I:\pcclub\T\borland\bcc\bin\Lib\PSDK"

に書き換えて再コンパイルしたところ無事解決。

 

基本的に俺はMacで開発しているが、覚えておいたほうが(というよりはいつでも思い出せるようにしておいた方が)良いかなぁ、と思い投稿した。

 

2014/11/11 Tue.

 

はてなブログ開設。

初めまして。

旧:ふくとも、と申します。

 

このたびはプログラマ(見習い)仲間がブログを書いているのを知り、私も自分の備忘録的に書いたものを公開してみようかと思い、本ブログを開設しました。

 

初投稿ということで軽く自己紹介でもしておきますね。

1997/5/2生まれなので、2014年現在は高2です。

趣味(同人活動含む)でプログラミングをしていて、メインで使ってるのはC/C++です。

その他は申し訳程度にHTML/CSS/PHPも使えないことはない、といった感じです。

 

現在は情報オリンピック予選に向けてのC/C++の勉強と冬コミに出展するノベルゲームのエンジン開発が主です。

 

Twitterでも割と活発に活動しております。

Twitterアカウント → 旧:ふくとも

 

敬語は苦手なので次回からは常態、一人称は普段同様「俺」で綴らせて頂くことをお許し下さい。

では今回はこの辺りで。

 

2014/11/10 Mon.