村人との会話

アバター
Tatu
記事: 445
登録日時: 14年前
住所: 北海道

村人との会話

投稿記事 by Tatu » 14年前

今回は村人との会話について書きます。
今回の変更・追加は全てmura.cpp内で行われています。

まずは村人の構造体を用意します。

CODE:

//村人の情報
struct{
	int x,y;
	int muki;
	int cnt;
	int img;
	int state;//話しているか否か(=移動するか否か)
	char message_knd;
	char message_line;
}murabito[7];
村人の名前、メッセージを追加します。

CODE:

//村人の名前
char murabito_name[7][48]={
	{"村長"},
	{"アイテムショップの回し者"},
	{"ドレスショップの回し者"},
	{"中途半端な勇者"},
	{"恐怖に駆られた村人"},
	{"他力本願な村人"},
	{"陽気な元キコリ"}
};

//村人のセリフ
char mura_message[30][8][100]={
	{
		"すまんなアイシャよ。",
		"わしにもっと力があれば其方にこんな危険なことを",
		"頼まなくても済むのじゃが…。",
		"村の未来は其方にかかっておる。頼んだぞ。",
	},
	{
		"以前、勇敢な若者が龍の調査をしてくると言って",
		"村を出て行ったことがあった。",
		"彼は「夜にかかる虹」に入ると言ったきり",
		"音信不通になってしもうた。",
		"いったいその先には何があるんじゃろう。",
	},
	{
		"村を出たら北に進むと川がある。",
		"川を上ると万年紅葉樹があるから空高く飛べ",
		"雪原を超えると湖に出る。そこには",
		"夜にかかる虹がある…。",
		"彼が残した言葉じゃ。",
	},
	{
		"え?わしらの家はどこにあるかって?",
		"まぁそう細かいことは気にするな。",
		"きっと製作者が書くの面倒くさがったのじゃろう。",
	},
	{
		"アイテムショップでは様々なアイテムが購入できるわよ",
		"とても有利になるものばかりなの。",
		"色々見て行ってね。",
	},
	{
		"アイテムは欲しいものばかりで色々悩んじゃうけど、",
		"お金がかかるのよねぇ…",
	},
	{
		"あなたは何のアイテムを買うのかしら?",

	},
	{
		"ショップの項目に空欄が多い?",
		"きっとバージョンアップで増えていくんじゃない?"
	},
	{
		"ドレスショップでは「変身」できるアイテムを売っているわよ。",
		"変身すると撃てるショットやショットの性質が変わるのよ。",

	},
	{
		"あなたが変身した素敵な姿を見せてね♪"
	},
	{
		"お金はかかるけど、頑張って資金を調達してきてね。"
	},
	{
		"基本東○のパクリだけど、ここだけシステムが違うのね。",
	},
	{
		"俺も村の外に出ようと思ったけど、敵がうようよいて",
		"出られやしなかった。危ないから外に出ちゃだめだよ。"
	},
	{
		"え?外に出るのかい??",
		"後悔する前にやめときなって。",
	},
	{
		"龍の吐く攻撃は…",
		"とても避けられるような攻撃じゃない。",
	},
	{
		"しかし、敵は何を撃ってきているんだ?",
	},
	{
		"なんなんだあの龍は。",
		"この村はいつになったら安全になるんだ…。",
	},
	{
		"頼む!あの悪者の龍をやっつけてくれ!"
		"アイシャならきっと出来るよ。"
	},
	{
		"あの龍の正体はいったいなんなんだ…!",
	},
	{
		"しかし何故シューティングとRPGが一体化?",
	},
	{
		"龍を何とかしないと安心して暮らせやしない…。",
		"どうして突然龍なんか現れたんだろう。",
	},
	{
		"龍の正体っていったい何なんだ?",
	},
	{
		"何故敵が龍なんだ…。",
	},
	{
		"まさか風神録にあやかって龍神録にしたわけではあるまいな",
	},
	{
		"現役は引退したが、わしはキコリでなぁ。",
		"今でも斧を見る時を切ってみたくなるんだ。",
		"斧があればなぁ…。",

	},
	{
		"まだわしも若いもんには負けんよ。",
		"斧があればスパッと木を切ってみせるぞ。",
		"斧があれば…。",
	},
	{
		"斧を持ってきな。",
		"わしの力を見せてやるから。",
	},
	{
		"斧といってもレ○ナみたいな斧持ってくるなよ、怖いから。",
		"・・あ、あれは斧じゃなくてナタか。",
	},
	{
		"斧があれば現役時代の腕を見せてやるんだがなぁ‥。",
		"‥何?斧を持ってきただって?",
		"よし、見せてやろう。",
		"ちょっと待ってろ。",
	},
	{
		"どうだいあっという間に木が無くなっちまっただろう。",
		"まだまだ衰えちゃいないよ。ワハハハハ。",
		"‥何、この先へ進むのかい?",
		"危険すぎるからやめ‥",
		"いや、君ならやれるかもしれない。",
		"‥君にしか出来ないだろう。",
		"君が村の平和を取り戻してくれると信じているよ。",
	}
};
会話の処理について
話しかけたときに村人がその方向にいたらTALKとする。

TALKの内容は
対応する文字列を表示する。
キーを押したとき、続きがあればその続きを、
それがなければメッセージに応じた処理をします。


以下を変更

CODE:

//村での自キャラデータ
struct{
	int x,y;
	int muki;
	int shift;
	int talk;//どの村人と話しているか
}m_ch;
m_ch_moveに以下を追加

CODE:

		//話をする
		if(CheckStatePad(configpad.shot)==1){
			switch(m_ch.muki){
			case 0:
				for(int i=0;i<7;i++){
					if(murabito[i].x==m_ch.x+32 && murabito[i].y==m_ch.y){
						m_ch.talk=i;
						murabito[i].state=1;
						mura_state=TALK;
						return;
					}
				}
				break;
			case 1:
				for(int i=0;i<7;i++){
					if(murabito[i].x==m_ch.x && murabito[i].y==m_ch.y+32){
						m_ch.talk=i;
						murabito[i].state=1;
						mura_state=TALK;
						return;
					}
				}
				break;
			case 2:
				for(int i=0;i<7;i++){
					if(murabito[i].x==m_ch.x-32 && murabito[i].y==m_ch.y){
						m_ch.talk=i;
						murabito[i].state=1;
						mura_state=TALK;
						return;
					}
				}
				break;
			case 3:
				for(int i=0;i<7;i++){
					if(murabito[i].x==m_ch.x && murabito[i].y==m_ch.y-32){
						m_ch.talk=i;
						murabito[i].state=1;
						mura_state=TALK;
						return;
					}
				}
				break;
			}
		}
mura_iniに村人に関する情報の初期化を追加。

CODE:

	murabito[0].cnt=0;
	murabito[0].x=32*3;
	murabito[0].y=32*2;
	murabito[0].muki=0;
	murabito[0].message_knd=0;
	murabito[0].message_line=0;

	murabito[1].cnt=0;
	murabito[1].x=32*3;
	murabito[1].y=32*4;
	murabito[1].muki=0;
	murabito[1].message_knd=4;
	murabito[1].message_line=0;

	murabito[2].cnt=0;
	murabito[2].x=32*3;
	murabito[2].y=32*6;
	murabito[2].muki=0;
	murabito[2].message_knd=8;
	murabito[2].message_line=0;

	murabito[3].cnt=0;
	murabito[3].x=32*3;
	murabito[3].y=32*8;
	murabito[3].muki=0;
	murabito[3].message_knd=12;
	murabito[3].message_line=0;

	murabito[4].cnt=0;
	murabito[4].x=32*3;
	murabito[4].y=32*10;
	murabito[4].muki=0;
	murabito[4].message_knd=16;
	murabito[4].message_line=0;

	murabito[5].cnt=0;
	murabito[5].x=32*5;
	murabito[5].y=32*2;
	murabito[5].muki=0;
	murabito[5].message_knd=20;
	murabito[5].message_line=0;

	murabito[6].cnt=0;
	murabito[6].x=32*5;
	murabito[6].y=32*4;
	murabito[6].muki=0;
	murabito[6].message_knd=24;
	murabito[6].message_line=0;
}
今回、村人は青い四角で表し、白い文字で番号を付けることにします。

mura_graphに以下を追加

CODE:

	//村人の描画
	for(i=0;i<7;i++){
		DrawBox(murabito[i].x,murabito[i].y,murabito[i].x+32,murabito[i].y+32,color[4],TRUE);
		DrawFormatString(murabito[i].x,murabito[i].y,color[0],"%d",i);
	}
村人との会話の制御・メッセージ描画を行う関数を用意します。

CODE:

void control_mura_talk(){
	if(CheckStatePad(configpad.shot)==1){
		if(mura_message[murabito[m_ch.talk].message_knd][murabito[m_ch.talk].message_line+1][0]!='\0'){
			murabito[m_ch.talk].message_line++;
		}
		else{
			murabito[m_ch.talk].message_line=0;
			if(murabito[m_ch.talk].message_knd<28){
				if(murabito[m_ch.talk].message_knd%4!=3){
					murabito[m_ch.talk].message_knd++;
					murabito[m_ch.talk].state=0;
					mura_state=WALK;
				}
				else{
					murabito[m_ch.talk].message_knd-=3;
					murabito[m_ch.talk].state=0;
					mura_state=WALK;
				}
			}
			else{
				murabito[m_ch.talk].state=0;
				mura_state=WALK;
			}
		}
	}
}

void graph_mura_talk(){
	DrawBox(0,400,640,480,color[4],TRUE);
	DrawStringToHandle(20,410,murabito_name[m_ch.talk],color[0],font[1]);
	DrawStringToHandle(40,450,mura_message[murabito[m_ch.talk].message_knd][murabito[m_ch.talk].message_line],color[0],font[0]);
}
mura_mainに以下を追加

CODE:

	case TALK:
		mura_graph();
		graph_mura_talk();
		control_mura_talk();
		break;
	}
これで村人と話せるようになりました。

村人の歩行、当たり判定、斧とキコリのセリフの変化の処理は未実装です。


セリフはv2.51から収集。変わっているものもあるようです。
「東○のパクリなんて言わせない」といっていたのはいつまででしたっけ。


村長のセリフは
「音信不通になってしもおた。」ではなく、
「音信不通になってしもうた。」としました。

同じく村長のセリフで
万年広葉樹になっていたので万年紅葉樹としました。

他力本願な村人のセリフが
「どうして突然龍何か現れたんだろう。」のままです。
「龍なんか」に修正されたはずでは?

斧を持ってきたとき、また、その後のキコリのみ二点リーダを使用する。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前

Re: 村人との会話

投稿記事 by Dixq (管理人) » 14年前

良く覚えてますね・・。
そして努力が半端ない^^;
セリフは直しておきますねw