第十章(´・ω・`)おばあちゃん、プレイヤーモデルを追加するわよ☆



・この男、放っておけないぜ!

第九章は作るものが何もなかったので今回はちょっと面白い実験です。
ModelViewerでHalf-Life2の主要キャラクタ達のモデルを見た人はもう気づいてると思いますが、 彼らはデスマッチで必要なモーションのシーケンスデータを全て持っています。

そうなると彼を放っておくわけにはいきません。ぜひデスマッチへ参加させてみましょう。


「奥さん、ビール券付けますから3ヶ月だけ新聞契約おねがいしますよ」

・コード変更

ブリーン博士を追加するためのコード変更はserver.dllhl_sdkプロジェクト 側のコード変更を行えばclient_sdkプロジェクト側で必要なコード変更も完了できるので、 作業はhl_sdkプロジェクト上で行います。

hl2mp_player.cppの 83行目近辺で以下の赤く記した部分を挿入します。
これはズバリ、コンバインチーム側のモデルのリストに博士を追加しています。
const char *g_ppszRandomCombineModels[] =
{
	"models/combine_soldier.mdl",
	"models/combine_soldier_prisonguard.mdl",
	"models/combine_super_soldier.mdl",
	"models/police.mdl",
	"models/breen.mdl",
};

☆同じくhl2mp_player.cppの 149行目近辺で以下の赤く記した部分を挿入します。
博士死亡時の音声をあらかじめメモリへ読み込んでおくための処理。
	PrecacheScriptSound( "NPC_MetroPolice.Die" );
	PrecacheScriptSound( "NPC_CombineS.Die" );
	PrecacheScriptSound( "NPC_Citizen.die" );
	PrecacheScriptSound( "NPC_DrBreen.die" );
}

☆同じくhl2mp_player.cppの 374行目近辺で以下の赤く記した部分の内容に書き換えます。
コンバイン側のデフォルトモデルを"models/Combine_Soldier.mdl"から博士のモデルに変更しています。
	if ( modelIndex == -1 || ValidatePlayerModel( szModelName ) == false )
	{
		szModelName = "models/breen.mdl";
		m_iModelType = TEAM_COMBINE;

		char szReturnString[512];

☆同じくhl2mp_player.cppの 504行目近辺で以下の赤く記した部分を挿入します。
モデルの名称から"breen"をスキャンして、 見つかったらプレイヤーの音声種別を博士用の定数定義値にセットしています。
	else if ( Q_stristr(pModelName, "combine" ) )
	{
		m_iPlayerSoundType = PLAYER_SOUNDS_COMBINESOLDIER;
	}
	else if ( Q_stristr(pModelName, "breen" ) )
	{
		m_iPlayerSoundType = PLAYER_SOUNDS_DR_BREEN;
	}
}

☆次はhl2mp_player_shared.cppの 33行目近辺で以下の赤く記した部分を挿入します。
博士モデル用の音声スクリプト定義名称のプレフィックスを追加しています。
const char *g_ppszPlayerSoundPrefixNames[PLAYER_SOUNDS_MAX] =
{
	"NPC_Citizen",
	"NPC_CombineS",
	"NPC_MetroPolice",
	"NPC_DrBreen",
};

☆最後にhl2mp_player_shared.hの 21行目近辺で以下の赤く記した部分を挿入します。
博士モデル用プレイヤー音声種別の定数定義値を追加しています。
enum
{
	PLAYER_SOUNDS_CITIZEN = 0,
	PLAYER_SOUNDS_COMBINESOLDIER,
	PLAYER_SOUNDS_METROPOLICE,
	PLAYER_SOUNDS_DR_BREEN,
	PLAYER_SOUNDS_MAX,
};

変更が終わったらhl_sdkプロジェクト、 client_sdkプロジェクト共にビルドしてくらはい

・音声スクリプトの準備

おばあちゃんのMODフォルダ

C:\Program Files\Valve\Steam\SteamApps\SourceMods\Bodycon

こっから更にscriptsフォルダへ下ったところにある

game_sounds_player.txt

というファイルを開きます、武器関連の音声はgame_sounds_weapons.txtに 定義しましたが、プレイヤー関連の音声はここへ定義するのです。

ファイルの末尾に(ぶっちゃけどこでもいいんですが)以下の記述を追加してください。
"NPC_DrBreen.RunFootstepLeft"
{
	"channel"		"CHAN_BODY"
	"volume"		"VOL_NORM"
	"pitch"		"PITCH_NORM"

	"soundlevel"	"SNDLVL_STATIC"

	"rndwave"
	{
		"wave"	"npc/footsteps/hardboot_generic1.wav"
		"wave"	"npc/footsteps/hardboot_generic2.wav"
		"wave"	"npc/footsteps/hardboot_generic3.wav"
	}
}

"NPC_DrBreen.RunFootstepRight"
{
	"channel"		"CHAN_BODY"
	"volume"		"VOL_NORM"
	"pitch"		"PITCH_NORM"

	"soundlevel"	"SNDLVL_STATIC"

	"rndwave"
	{
		"wave"	"npc/footsteps/hardboot_generic4.wav"
		"wave"	"npc/footsteps/hardboot_generic5.wav"
		"wave"	"npc/footsteps/hardboot_generic6.wav"
	}
}

"NPC_DrBreen.die"
{
	"channel"		"CHAN_VOICE"
	"volume"		"VOL_NORM"
	"pitch"		"PITCH_NORM"

	"soundlevel"	"SNDLVL_NORM"

	"rndwave"
	{
		"wave"	"*vo/citadel/br_ohshit.wav"
		"wave"	"*vo/citadel/br_no.wav"
		"wave"	"*vo/citadel/br_youneedme.wav"
	}
}

  • "NPC_DrBreen.RunFootstepLeft"は博士の左足の足音。
  • "NPC_DrBreen.RunFootstepRight"は博士の右足の足音。
  • "NPC_DrBreen.die"は博士がくたばる時の声。

  • 各定義に設定している内容については第九章で詳しく調べたのでもう分かりますよね。


    ・モデル選択用のVTF、VMTファイル作成

    さて、ここまでくればコンソールから"cl_playermodel models/bren.mdl"を実行 すると博士のモデルは選択可能です。しかし、ここはやはりオプション画面から博士が選択 できなくきゃ納得がいかないのでがんばってみます。

    オプション画面からキャラクタモデルを選択可能にするには、モデルと同じファイル名 (拡張子を含まない)のVTF、VMTをMODフォルダから更に下の

    materials/VGUI/playermodels

    上記フォルダ下に配置することが必要(フォルダは初期状態で存在しないため、自分で掘り下げてください)。 これはモデルの選択画面で表示される画像なのです。

    作成するVTFファイルは
  • サイズは256×256。
  • 左上詰めで200×200の範囲しか使用しないため、残りの範囲は透過すること。

  • さあ作れ!テクスチャやデカルの作り方はあっちこっちで取り上げられてるからすぐ できますよね。

    おばあちゃんはこれを元に作りました

    「正月に買ったハンバーグにソースが付いていなかった、私を怒らせない方がいい」


    みなさん、ファイルは出来ましたか?
    「できない!作れない!死んじゃう!」っていう人はおばあちゃんの作ったこれをどぞー

    breen_texture.zip


    ・博士〜、ラブ〜、カム〜!

    breen.vmtbreen.vtfmaterials/VGUI/playermodelsフォルダにぶっこんだら ゲーム開始・・・の前にオプション画面をみてみましょう!


    (n‘∀‘)η激シブ!ブリーン様キタワァー!!

    第八章のテスト用マップでゲームを開始したらレベルズチームにJoinして、 同じく第八章と同じ手順でBotを出してみましょう。


    (´・ω・`)つハウディ!ハウディ!


    ( ゚∀゚)ドガガガガガー!COOOOOOOOL!!アヒャヒャヒャヒャ!!

    でもコンソールに警告が出ちゃう、やっぱり最終的にはモデルをデスマッチ用に コンパイルして作り直さないといけないみたいですね。
    Performance warning: Mark bone 'ValveBiped.Bip01_R_Hand' in model 'breen.mdl' as being used by bone merge in the .qc!

    また、他のキャラをレベルズチームに加える場合は今回の変更箇所の他にも 手を加える必要のある個所があるので、ヒマな人はチャレンジしてみてください。

    (´・ω・`)つ おつかれチャン