【GAME】ARMA3 EXILE MODサーバの旅その39
前サーバ構築の際にやりたかった事を、しております。
Arma3を必要としない、見ての通り素材作成です。。
(;´∀`)
普段はあまり画像や音源編集なんてしないので、なんだか新鮮です。
画像は、Billboardオブジェクトへのテスクチャーやローディングロゴなど、ほぼ完了。
今は、音源編集してます。
さすがArmaです。MODだけで無く音源もネット上に結構あります。Regional Ambient Sounds Packを使わせて頂いてます。そのままではファイルサイズがデカいんで編集してます。
以前、動画編集用に買ったVegasProに付いてきた、SoundForgeとやらで編集してたんですが、後々に高音質データしか作れない事に気付き、フリーで有名なAudacityに切り替えました。
8Khzな低音質データで十分なのです。
(;´∀`)
これで、音声1ファイル80Kb程度に収める事ができた。どちらも、Ogg形式は対応してる。
(アドオン分全て稼働させるため)しばらく放置していて、確認(プレーヤーゼロ状態)
Core i5 4670Kですが、1.5Ghz近辺で、15%が最大のようでした。メモリは、2.2GB付近。
タスクスケジューラでGPU値が見れるようになりましたが、この「Compute」って、PhysXを含んでたりしないのかな。とはいえ、こちらも3%程度。
これなら、本番環境のA6-3650(OC3.5Ghz)でも耐えられるでしょう。Linuxだし。
追記:OccupationPlacesの改造補足
さらに改良しました。
MAPに記録されたランドマークポイントで沸く(デフォルト)所を、近くの建物を探して、そこで沸くようにしましたが。
稀に、Waypointの失敗をするらしく、棒立ちになってしまうようでした。
そこで、建物の近くの道路上で湧くようにしました。
これで、ほとんどの場合、町並びの所でパトロールしてくれるはずです。
今回、青字の部分を新しく追加しました。ログ出しはコメントになってます。建物・道路が見つからなければ、スルーするだけです。
occupationPlaces.sqf(56行付近)追加する全コード
_houses=nearestTerrainObjects[_pos,[“BUILDING","HOUSE"],400,false];
//_logDetail = format [“[OCCUPATION:Places]:: name: %1 count %2",_locationName,count(_houses)];
//[_logDetail] call SC_fnc_log;
if(count(_houses) > 0) then
{
_pos=getPos selectRandom _houses;
_road=_pos nearRoads 100; ←100m圏内の道路を探す
if(count(_road) > 0) then
{
_pos = getPos selectRandom _road; ←ランダムで選ぶ
};
//_logDetail = format [“[OCCUPATION:Places]:: change name: %1 position: %2",_locationName,_pos];
//[_logDetail] call SC_fnc_log;
};
※ブラウザからコピーすると、” とか ’ とか化けるので注意
※nearRoadやnearestTerrainObjectsは、エラー時はNULL(nil)を返すのですが、count()に渡しても例外発生は無く、問題無いようです。nilチェックするとコードが数行増えてしまうし、削除しました。
追記:看板とかの結果チェック
(;´∀`)
Armaの世界で、ゆっくりに出会えるとは思ってもみませんでした。
256*256で作ってしまったので、横長になってもうた。
追記:調整テストプレー
バグとか無いか、最終的な調整に入っております。
画面右上のロゴが、これで良いのか、未だ悩んでる。
追記:幻のアイテムと遭遇
ヽ(;゚д゚)ノ!
激レアにしたので、設定した俺ですら驚いてしまったのだw
黄色なんで遠くからでも目立っちゃうんですけども。
他サーバに比べれば、結構湧きます。
ただ・・、写真のように、背景に溶け込むように設定してます(何度も微調整しまくった・・)
。゚(゚´Д`゚)゚。
町漁りでも楽しめるようにの配慮です。私は、EXILE初見の頃は、アイテム漁りだけで十分おもろかったんですw
サバイバル押しの調整になっております。
これでも、十分甘くしましたけども・・。
追記:看板スクリプトの最終盤
大きな看板(Land_Billboard_F)に、順番に画像を貼り付けます。ランダムにしたければ、「selectRandom _bills」と書けばOK(※1の部分)
古いラジオ(Radio_Old)に、3Dサウンドを割り当てます。サウンドの詳細は、description.extに記述します。複数登録してランダム再生も可能。
青字の部分は、あるオブジェクト周辺の看板は、画像固定したい場合などに利用できます。不要なら削除してください。
//*****************************add initServer.sqfからコピーする部分
private _vehicles = [
[“Land_Billboard_F", [5818.69, 5904.45, 253.427], [0.611226, -0.791456, 0], [0, 0, 1], true],
[“Land_Billboard_F", [6205.13, 5912.37, 308.629], [0.243536, -0.969892, 0], [0, 0, 1], true],
[“Radio_Old", [6076.05, 5625.22, 304.328], [-0.440405, -0.897781, -0.00575302], [0.00962416, -0.0111285, 0.999892], true],
・・・・・・
下:追記する部分
private _bills=[ ←画像の一覧
“bill0.jpg","bill1.jpg","bill2.jpg","bill3.jpg","bill4.jpg"
];
private _cnt=0;
{
private _vehicle = (_x select 0) createVehicleLocal [0,0,0];
_vehicle allowDamage false;
_vehicle setPosWorld (_x select 1);
_vehicle setVectorDirAndUp [_x select 2, _x select 3];
//_vehicle enableSimulationGlobal (_x select 4);
//_vehicle setVariable [“ExileIsLocked", -1, true];
if (_vehicle isKindOf “Land_Billboard_F“) then ←看板
{
if(count(nearestObjects [_vehicle, [“Land_Kiosk_redburger_F"], 100]) > 0)then{ ←100m以内の看板は画像固定
_vehicle setObjectTexture [0,"bill14.jpg"];
}else{
_vehicle setObjectTexture [0,_bills select _cnt]; ←※1
_cnt=_cnt+1;if(_cnt >= count(_bills)) then{_cnt=0};
};
};
if (_vehicle isKindOf “Radio_Old“) then ←3Dサウンドの登録
{
private _trg = createTrigger [“EmptyDetector", _x select 1];//,false];
//_trg setTriggerActivation [“NONE","NOT PRESENT",false];
_trg setTriggerStatements [“true","",""];
_trg setSoundEffect [“$NONE$","","","Radio“]; ←サウンド指定
};
}
forEach _vehicles;
用意する画像は、2:1で良いようです。綺麗にしたいなら、512x256(JPEGで約50KB)で、多少汚くても良ければ256x128(JPEGで約20KB)で十分です。PAAかJPEGで。
追記:AI動作Behaviorについて
Stealth/Combat/Aware/Safe/Careless
5種類選べるんだけども、Safe/Carelessは、本気の”平和ボケ状態”です。危険があっても、戦おうとしません。これはマズイ。パトロールAIを設置する際は、SafeとCarelessは避けたほうがいい。
DMSやOccuなどではAwareが使われてます。危険があっても、隊列を乱さず動作してるのはそのためです。
Stealth/Combatは、設定Waypointをキャンセルしちゃう。Stealthともなると、匍匐、ライトOFF、勝手に行動し始めたりします。
追記:3Dサウンド設定
(;^ω^)
description.extにこんな感じで登録しておくんですが。
引数がイッパイあって、ロクに調べもしてませんでした。
左から、「ファイル名・音量・ピッチ・聞こえる距離・切り替り頻度・切り替り設定3つ(min/mid/max)」となってます。
class CfgSFX{
sounds[]={Radio};
class Radio{
name="";
sound1[]={“radio1.ogg",db-10,1.0,500,0,0,20,52.6};
sound2[]={“radio2.ogg",db-10,1.0,500,0.2,0,20,42.3};
sound3[]={“radio3.ogg",db-10,1.0,500,0.2,0,20,53.1};
sound4[]={“radio4.ogg",db-10,1.0,500,0,0,20,39.8};
sounds[]={“sound1″,"sound2″,"sound3″,"sound4"};
empty[]={“",0,0,0,0,0,0,0};
}
};
使う時は、”Radio”とすれば、登録されてる4種類の中からランダムで選ばれて再生されます(sounds[]の中身)リピート再生時は、最後から4つの設定で、勝手に切り替わるようです。
ここでは距離500mとしてますが、本当に500m辺りから聞こえ初めます。1Kmと設定しても同様です。なので、実際にプレーしてみて、リアリティがあるかどうか確認が必要です。
自分ではラジオが鳴ってる様子を出したかったので、丁度良かったです。
(;´∀`)
追記:PAAファイル化
何気に圧縮が効いてるようです。
PNG(23.8KB)が、17.8KBまで小さくなってます。
う・・ん、JPEG得意の画像もあるし、一概になんとも言えませんが。
透明を利用するならPAAしかないですけども。
いやいや、JPEGの高圧縮に勝るものは無いようでした(近くで見ると汚いけども)モデルテクスチャーなどの利用以外はJPEGの方がさらに50%位小さいです。
別途インストール必要な「Arma3 Tools(無料)」内の「TexView2」で変換できます。変換する画像は、2^xサイズでないとダメです。
追記:MAP外放射能エリア
動作も確認。
ファイル1個だけでシンプルでした。
追記:Meltdown&Spectre兄弟
いわゆるMeltdownとSpectre問題。
そのまま、CPUコードに依存する設計上の問題なので、何気に”大問題”なんです。
ソフト側(OSも含む)で根本的に対応できないんです。ハードウェア(CPU)交換でしか対応できない。
(高速化のために)予め予測実行した後に、エラーを発生させると、予測実行していた部分が、そのままクリアされず残ってるというもの。
この予測実行部分に、メモリを読み取るコードを忍ばせておくと、いくらでも盗めるんだそうです。
※簡単なCPUコードで、プログラマなら誰でも理解できる
これは、絶対、裁判沙汰になります。インテルさんガクブル状態でしょう。独自ソフトを使ってる産業業界での、対策コストは相当な額ですよ・・・。
インテルの現行製品のほとんどが該当、AMDも古めの製品に該当してるそうです(10年以上前、Athlon64 X2とか)
あるCPU生コードを実行しなきゃいい訳で、インターネットで感染するという類のものではありません。