#include <stdio.h>
#include <windows.h>
#include <math.h>
#include "scene.h"
#include "DxLib.h"
#include "MyLib.h"
//#define INFO_HP_SX 112
//---------------------------------------------------------------------------
//グローバル変数
//---------------------------------------------------------------------------
bool CLOSE_FLAG = false;
SceneBase* SCENE, * NEXT_SCENE;
//---------------------------------------------------------------------------
//このファイルでしか使えない静的変数
//---------------------------------------------------------------------------
static int GHANDLE1[256];//マップ描画用のタイル画像
static int GHANDLE_CHAR[1024];//キャラクター描画用のタイル画像
//---------------------------------------------------------------------------
//外部参照変数
//---------------------------------------------------------------------------
extern unsigned char MAPDATA[64][64];
extern unsigned char MAPDATA2[64][64];
extern unsigned char CHAR_DATA[64][64];
extern unsigned char CHAR_HIT_DATA[64][64];//キャラクターの当たり判定用
extern unsigned char DEAD_SPACE_DATA[64][64];
extern int GAME_VARIABLES[100];
extern int HANDLE1;
extern int MAP_X, MAP_Y, POS_X, POS_Y;
extern int MOVE_STEP;
extern int CHR_POS;
extern int NPC_MAX;
extern int NPC_movement_weight;
extern struct GAME_ACTOR actor[5];
extern struct GAME_ACTOR actor_base;
extern struct GAME_ACTOR actor_base2;
extern struct GAME_ACTOR actor_base3;
extern struct GAME_ACTOR actor_base4;
extern struct GAME_PARTY game_party[5];
extern struct GAME_CHARACTER npc[32];
//-------------------------------------------------------------
// シーンの基本クラス
//-------------------------------------------------------------
SceneBase::SceneBase() {
//Info_Window = &win3;//基本クラスのポインタに代入
}
SceneBase::~SceneBase() {
}
void SceneBase::start() {
//Info_Window->visible = false;//infoウィンドウ非表示
}
void SceneBase::main() {
int code;
start();
do {
update();
code = WaitTimer(1);//ウェイト0.1秒
// ウインドウの閉じるボタンが押されたかどうかを取得する
if (GetWindowUserCloseFlag(false) != 0) {//フォームのクローズボタンが押されたらCLOSE_FLAG=true
CLOSE_FLAG = true;
}
} while ((SCENE == NEXT_SCENE) && (!CLOSE_FLAG) && (code == 0));
//if (CLOSE_FLAG) {
transition(0, 0);//フェードアウト
//}
}
void SceneBase::update() {
}
//-------------------------------------------------------------
// タイトルクラス
//-------------------------------------------------------------
Title::Title() {
//タイトルの背景グラフィックをメモリへの読みこみ
GHandle = LoadGraph(".\\picture\\Title.bmp");
Command_Window = &win;//基本クラスのポインタに代入
}
Title::~Title() {
// 読み込んだ画像のグラフィックハンドルを削除
DeleteGraph(GHandle);
}
void Title::start() {
BGM_Manage(3);
logo_draw();//リリカルリミテッドのロゴ描画
BGM_Manage(1);//タイトルBGM
//waip(Bitmap);//読み込んだビットマップを表示画面にワイプ表示する
// 作成した裏画像を描画対象にする
set_draw_screen_back();
// 画面左上に描画します(『DrawGraph』を使用)
DrawGraph(0, 0, GHandle, FALSE);
transition(1, 0);//フェードイン
Command_Window->set(320 - 80, 360, 160, 104);
}
void Title::main() {
int code;
start();
do {
update();
code = WaitTimer(1);//ウェイト0.1秒
// ウインドウの閉じるボタンが押されたかどうかを取得する
if (GetWindowUserCloseFlag(false) != 0) {//フォームのクローズボタンが押されたらCLOSE_FLAG=true
CLOSE_FLAG = true;
}
} while ((SCENE == NEXT_SCENE) && (!CLOSE_FLAG) && (code == 0));
//if (CLOSE_FLAG) {
transition(0, 0);//フェードアウト
//}
}
void Title::update() {
// 作成した裏画像を描画対象にする
set_draw_screen_back();
// 画面を初期化
ClearDrawScreen();
// 画面左上にタイトル画像を描画します(『DrawGraph』を使用)
DrawGraph(0, 0, GHandle, FALSE);
//ウィンドウ表示
Command_Window->set(320 - 80, 360, 160, 104);
Command_Window->update();
//インプットトリガー
if (get_button() == 1) {
switch (Command_Window->index) {
case 0:
//ゲームパーティーの初期化 v1~v3 0..3
game_party_settings_actor_to_party(0, 1, 2, 3, true, true);
//SaveEnemyData();//エネミーデータの構造体を保存
MakeLevelUpList();//レベルアップ経験値リスト作成
game_variables_initialization();//ゲーム変数の初期化
NEXT_SCENE = new Map;//基本クラスのポインタに代入
SEPlay(0);//決定
break;
case 1:
SEPlay(0);//決定
//SaveEnemyData();//エネミーデータの構造体を保存
MakeLevelUpList();//レベルアップ経験値リスト作成
//LOAD_FILE_MODE = 1;//Title画面に戻る
//NEXT_SCENE = new GLoadFile;//基本クラスのポインタに代入
break;
case 2:
SEPlay(0);//決定
// DXライブラリ使用の終了処理
CLOSE_FLAG = true; // ソフトの終了
break;
}
}
//表示スクリーンにコピー
set_draw_screen_front();
// 描画対象画像を画面いっぱいに拡大して描画する
DrawRectGraph(0, 0, 0, 0, 640, 480, HANDLE1, FALSE, FALSE);
if (get_button() == 15) {//F5
Screen_size_change();//スクリーンサイズ変更
}
}
void Title::logo_draw() {
return;
//擬似ラスタースクロール
double vibration = 0.2;
double v_width = 256.0;
double offset_x, offset_y, i = 160.0;
double gap[100];
double j;
int k;
int GrHandle;
GrHandle = LoadGraph(".\\picture\\logo.bmp");
for (k = 0; k <= 256; k++) {
// 作成した裏画像を描画対象にする
set_draw_screen_back();
// 画面を初期化
ClearDrawScreen();
for (j = 0; j <= 64; j += 1.0) {
gap[(int)j] = v_width * sin(vibration * double(j + i));
offset_x = (640 / 2) - (256 / 2);
offset_y = (480 / 2) - (64 / 2);
// 透過色処理あり、反転処理なしで描画
DrawRectGraph((int)(gap[(int)j] + offset_x), (int)(j + offset_y), 0, (int)j, 256, 1, GrHandle, TRUE, FALSE);
ProcessMessage();
}
i -= 2.5; //スピード
vibration += 0.0001; //振動数
v_width -= 1.0; //振れ幅
//表示スクリーンにコピー
set_draw_screen_front();
// 描画対象画像を画面いっぱいに拡大して描画する
DrawRectGraph(0, 0, 0, 0, 640, 480, HANDLE1, FALSE, FALSE);
WaitTimer(1);
}
//完成画像表示
// 作成した裏画像を描画対象にする
set_draw_screen_back();
// 画面を初期化
ClearDrawScreen();
DrawRectGraph((640 / 2) - (256 / 2), (480 / 2) - (64 / 2), 0, 0, 256, 64, GrHandle, TRUE, FALSE);
//表示スクリーンにコピー
set_draw_screen_front();
// 描画対象画像を画面いっぱいに拡大して描画する
DrawRectGraph(0, 0, 0, 0, 640, 480, HANDLE1, FALSE, FALSE);
// ここで3秒まつ
WaitTimer(1000);
//文字表示
// 描画する文字列の文字セットを変更します
ChangeFont("MS ゴシック");
// フォントのタイプをエッジつきアンチエイリアスフォントに変更
ChangeFontType(DX_FONTTYPE_ANTIALIASING);
// 描画する文字列の太さを設定
SetFontThickness(1);
// 描画する文字列のサイズを設定
SetFontSize(18);
unsigned int Cr;
// 白色の値を取得
Cr = GetColor(255, 255, 255);
// 作成した裏画像を描画対象にする
set_draw_screen_back();
// 画面を初期化
ClearDrawScreen();
// 文字列の描画
DrawString((640 / 2) - (240 / 2), (480 / 2) - (32 / 2), "Music T.M.BACH", Cr);
//表示スクリーンにコピー
set_draw_screen_front();
// 描画対象画像を画面いっぱいに拡大して描画する
DrawRectGraph(0, 0, 0, 0, 640, 480, HANDLE1, FALSE, FALSE);
// ここで3秒まつ
WaitTimer(2000);
// 作成した裏画像を描画対象にする
set_draw_screen_back();
// 画面を初期化
ClearDrawScreen();
// 文字列の描画
DrawString((640 / 2) - (240 / 2), (480 / 2) - (32 / 2), "Program Tomomi", Cr);
//表示スクリーンにコピー
set_draw_screen_front();
// 描画対象画像を画面いっぱいに拡大して描画する
DrawRectGraph(0, 0, 0, 0, 640, 480, HANDLE1, FALSE, FALSE);
// ここで3秒まつ
WaitTimer(2000);
// 読み込んだ画像のグラフィックハンドルを削除
DeleteGraph(GrHandle);
}
これを作るのに、RGSSをかなり参考にしました。
「バルキリーの冒険」で、すでに実装していたんですけど。
Visual Studioに開発環境を変えて、コードを書き直しました。
今のところあまり大きなバグは出ていないです。