Source Dedicated Server (SRCDS)
Team Fortress 2 が play for free になったので、Ded鯖を立ててみることにしてみました。
昔 Quake 系はガンガン立てていたけれど、Source 系はさっぱりだし良い機会ということで。
Dedicated Server
ここでは主に PC ゲームの専用サーバ、俗にいうゲームサーバを指します。
主に家庭用ゲーム機ではプレイヤーの一人がホストとなってマルチゲームを行いますが、PCゲームの大半ではマルチプレイ専用のサーバを別途用意することが多いです。
環境
FreeBSD-7.1 (amd64)
SRCDS は FreeBSD 向けのバイナリはありませんが、Linux エミュレーションで FreeBSD でも動作します。
今回は OS 依存の部分はあまりないので、Linux でも同じ手法でできるはずです。
また、あんまりスペックは要求されないですが、回線は光必須と考えたほうが無難です。
上り回線が細い ADSL や安定しない CATV は諦めてください。
FreeBSD での Linux エミュレーション
方法は割愛。ports から fc10 を使っています。
カーネルモジュールを確認します。
azusa# kldstat | grep linux 7 1 0xffffffffb073f000 18a2c linux.ko
linprocfs を mount します。
azusa# cat /etc/fstab | grep linprocfs linprocfs /compat/linux/proc linprocfs rw 0 0
SRCDS
azusa# pwd /usr/ports/games/linux-steam azusa# make install clean (ライセンスの確認を行って問題なければ yes)
ただし、SRCDS は ports を使う恩恵があまりないので直接ダウンロードしてもいいかもしれません。
azusa# wget http://steampowered.com/download/hldsupdatetool.bin
SRCDS 実行ユーザの作成
これがポイント。実行ユーザのホームディレクトリに .steam ディレクトリが必要です。
そこそこ大きいファイルがダウンロードされるため、root ではなく専用のユーザを作成したほうが無難です。
(データファイルの保存場所が設定できないっぽい?)
ユーザを作成します。FreeBSD の場合。Linux は useradd コマンドを使ってください。
(pw に -m オプション付けずに面倒くさいことをやっているのはskel経由で生成されるファイルが邪魔だからだけです)
azusa# mkdir /home/steam azusa# pw useradd steam -d /home/steam azusa# chown steam:stream /home/steam
steam ユーザにスイッチして初期設定を行います。
steam 側のサーバの機嫌が悪い時には数回行う必要があります。
azusa# su - steam $ pwd /usr/home/steam $ mkdir .stream $ ./steam Checking bootstrapper version ... Getting version 44 of Steam HLDS Update Tool Downloading. . . . . . . . . . . .Steam Linux Client updated, please retry the command CAsyncIOManager: 0 threads terminating. 0 reads, 0 writes, 0 deferrals. CAsyncIOManager: 21 single object sleeps, 0 multi object sleeps CAsyncIOManager: 0 single object alertable sleeps, 0 multi object alertable sleeps
Team Fortress 2 サーバの構築
サーバに必要なファイルをダウンロードします。
CDNに乗っていないせいか結構時間がかかりますので、風呂にでも入って身を清めておきましょう。
オプション の -game で対象のゲームを指定します。今回は tf です。
$ ./steam -command update -game tf -dir . Checking bootstrapper version ... Updating Installation No installation record found at ./orangebox No installation record found at ./orangebox No installation record found at . No installation record found at . No installation record found at . No installation record found at ./orangebox Checking/Installing 'Team Fortress 2 Content' version 254 0.12% downloading ./orangebox/tf/bin/server.dll 0.29% downloading ./orangebox/tf/bin/server.dylib (このあと延々と)
サーバの cfg をいじります。
% cd orangebox/tf/cfg % vi server.cfg
Quake 系に近いので特に問題はないはずですが、マップを回すのは別ファイル (mapcycle.txt、maplist.txt)ぽい?
server cvar についてはググるとすぐ出てきます。
当たり前のことですが、テスト時には LAN モードにしてください。(sv_lan 1)
Team Fortress 2 サーバのテスト起動
コンソールから下記のコマンドで起動しみます。
azusa% orangebox/srcds_run -game tf +maxplayers 24 +map ctf_2fort
他のマシンで Team Fortress2 を起動して開発者コンソールから
connect <サーバの IP アドレス>
と実行してサーバに接続できるかを確認してください。
Team Fortress 2 サーバの起動
毎回コマンド打つのも面倒なので、起動用スクリプトを用意します。
FreeBSD なら $LOCALBASE/etc/rc.d あたりに設置します。
(Linux でも動くように依存した処理はいれていません)
azusa# cat tf2server.sh #!/bin/sh BASEDIR=/home/steam USER=steam CONSOLE_LOG=$BASEDIR/console.log su "$USER" -c "exec $BASEDIR/orangebox/srcds_run -game tf +maxplayers 24 +map ctf_2fort > $CONSOLE_LOG 2>&1" & exit
have fun :D
xenの DomainU として FreeBSD を動かす
ようやく作業が完了したので、まとめてみます。
環境と目的
ubuntu あたりを Xen のサーバとして使うほうが楽なのですが、家にいてまで必要以上に Linux は触りたくないので NetBSD で。
ちなみにノート PC には ubuntu 入れて使っています。軽作業ならこれで十分ですしおすし。
構築手順
FreeBSD の Xen 用カーネルを作る。
FreeBSD xen の ML を見ると pmap で panic する修正が入っているとのことだったので、CURRENT で作ります。
このあたりの色々な修正は RELENG 8.2 へ MFC されていないので、おとなしく CURRENT です。
(STABLE へは MFC されてます)
CURRENT を作るのは先日の日記を参照。
http://d.hatena.ne.jp/po3/20110515/1305460610
Xen 用のディスクイメージを作る
下記 URL を参照しました。
http://forums.freebsd.org/showthread.php?t=10268
ただし、ディスクイメージを作るときは truncate ではなくて dd コマンドで作っています。
# dd if=/dev/zero of=disk.img bs=1m count=2k
俗にいう穴あきファイル(sparse) はあんまりよく分からないし、VMWare でも qemu でもパフォーマンスがガタ落ちだったの dd でフルに容量を使って作成しています。
Linux だと virtio を使うとマシになるのですが、やっぱり根本的に遅いし、ディスクも安いのでキニシナイ!
作ったディスクイメージに色々するのは先日の日記を参照。
/etc/fstab を適当に弄って /etc/ttys に xc0 を追加してください。
http://d.hatena.ne.jp/po3/20110514/1305384444
Xen の設定ファイルを作る
これは単純に下記のようなファイルを用意します。
memory = 855 name = "FreeBSD_DOMU" kernel = '/usr/home/xen/FreeBSD-CURRENT/xen.kernel' disk = [ 'file:/home/xen/FreeBSD-CURRENT/disk.img,hda1,w', ] extra = 'boot_verbose,boot_single,kern.hz=100,machdep.idle_mwait=0,vfs.root.mountfrom=ufs:/dev/ad0s1a' vcpus = 1 on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
machdep.idle_mwait=0 はもういらないかもしれない。
起動してみます。
gomyway# xm create ./xen.cfg -c Using config file "././xen.cfg". Started domain FreeBSD_DOMU 3DNow!> AMD Features2=0x11f<LAHF,CMP,SVM,ExtAPIC,CR8,Prefetch> real memory = 896532480 (855 MB) avail memory = 866402304 (826 MB) [XEN] IPI cpu=0 irq=128 vector=RESCHEDULE_VECTOR (0) [XEN] IPI cpu=0 irq=129 vector=CALL_FUNCTION_VECTOR (1) [XEN] xen_rtc_probe: probing Hypervisor RTC clock rtc0: <Xen Hypervisor Clock> on motherboard [XEN] xen_rtc_attach: attaching Hypervisor RTC clock xenstore0: <XenStore> on motherboard xc0: <Xen Console> on motherboard Timecounters tick every 10.000 msec xenbusb_front0: <Xen Frontend Devices> on xenstore0 [XEN] hypervisor wallclock nudged; nudging TOD. xenbusb_back0: <Xen Backend Devices> on xenstore0 xctrl0: <Xen Control Device> on xenstore0 xbd0: 2048MB <Virtual Block Device> at device/vbd/769 on xenbusb_front0 xbd0: attaching as ad0 Timecounter "TSC" frequency 2109592000 Hz quality 800 WARNING: WITNESS option enabled, expect reduced performance. Trying to mount root from ufs:/dev/ad0s1a []... rtc0: [XEN] xen_rtc_gettime rtc0: [XEN] xen_rtc_gettime: wallclock 1306675669 sec; 965899053 nsec rtc0: [XEN] xen_rtc_gettime: uptime 665 sec; 6026720 nsec rtc0: [XEN] xen_rtc_gettime: TOD 1306676334 sec; 971925773 nsec Setting hostuuid: 0f12f2c1-8947-11e0-bda0-6389d0dd6e1d. Setting hostid: 0x419c4544. No suitable dump device was found. Entropy harvesting: interrupts ethernet point_to_point kickstart. Starting file system checks: /dev/ad0s1a: FILE SYSTEM CLEAN; SKIPPING CHECKS /dev/ad0s1a: clean, 835786 free (1474 frags, 104289 blocks, 0.1% fragmentation) Mounting local file systems:. /etc/rc: WARNING: $hostname is not set -- see rc.conf(5). Starting Network: lo0. lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 options=3<RXCSUM,TXCSUM> inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL> Starting devd. add net ::ffff:0.0.0.0: gateway ::1 add net ::0.0.0.0: gateway ::1 add net fe80::: gateway ::1 add net ff02::: gateway ::1 Creating and/or trimming log files. Starting syslogd. /etc/rc: WARNING: Dump device does not exist. Savecore not run. ELF ldconfig path: /lib /usr/lib /usr/lib/compat a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout Clearing /tmp (X related). Updating motd:. Starting cron. Starting background file system checks in 60 seconds. Sun May 29 13:39:02 UTC 2011 FreeBSD/i386 (Amnesiac) (xc0) login:
なんとか起動しました。
TODO
とりあえず動かすところまではできましたが、メモリを 855MBよりも多くすると、また pmap で落ちます。
ルータとして動かすのでメモリはそんなにいらないので、この問題についてはスルーします。
USBメモリからXenServerをインストールしてみる
先日 Xen の DomU として FreeBSD を入れようと思ったものの、pmap_init で panic で落ちる問題はさっぱり。
そんな訳で現実逃避として XenServer をインストールしてみた。
インストール用の USB メモリを作る
何時買ったのかさっぱり思い出せない適当な 4GB の USB メモリからインストールしてみます。
自宅内のインストールサーバが停止中なので、わざわざ CD-R 焼くのは面倒だし、かなり地球に優しいエコじゃん. Jumping Now ってことで。
やることは
これだけ。ね、簡単でしょう?
FAT32 で USB メモリをフォーマットする
Windows 環境でやるなら HP USB Disk Storage Format Tool あたりで。
hp.com のどこにあるのかは分からなかったので詳細はググってください。
XenServer の ISO から USB メモリにコピー
Citrix のサイトから XenServer 無償版をダウンロードします。
http://www.citrix.co.jp/products/xenserver/download.html
ISO イメージをマウントできる適当なツール(DAEMON Tools Light)で、ISO の中身をそのまま USB メモリにコピーします。(すべてコピーする必要はないのですが、別に容量が足らないわけではないので)
次に USB メモリにコピーしたディレクトリとファイルをリネームする必要があります。isolinux から syslinux に変更します。
(例として G ドライブに USB メモリがささっている場合)
コマンドプロンプトでの例
C:\Users\popopo>g: G:\>move isolinux\isolinux.cfg isolinux\syslinux.cfg 1 個のファイルを移動しました。 G:\>move isolinux syslinux 1 個のディレクトリを移動しました。
syslinux でブートローダをインストールする
下記 URL から適当にダウンロードします。
http://www.kernel.org/pub/linux/utils/boot/syslinux/
D:\Download\syslinux-4.04> cp mboot\mboot.c32 g:\syslinux D:\Download\syslinux-4.04> cd win64 D:\Download\syslinux-4.04\win64> syslinux64.exe -am g:
として、必要なファイルを差し替えたのちブートローダを仕込みます。
mboot\mboot.c32 を USB メモリにコピーするのは、ISO 側の syslinux が Ver.3だから(多分)
このファイルを差し替えてやらないと、ローダで延々とエラー吐かれる。
(vesamenu.c32 も差し替えないと駄目なような…)
おまけ:1台の XenServer でなんとかする
仮想マシンを構築しようとしたものの、どうも ISO イメージは外部のストレージに置くことが前提、みたいな…
NFS サーバ作るのめんどい、samba サーバ作るのめんどいし、Windowsの共有フォルダがうまく動かない、ぐぬぬ。
ググったら下記のサイトが参考になりました。
http://www.noop.tk/index.php?XenServer
/home/iso に各 ISO イメージを格納する場合
# mkdir /home/iso # xe sr-create name-label="local iso" type=iso device-config:location=/home/iso device-config:legacy_mode=true content-type=iso fa54baf1-5ed0-e68a-873f-ed5257cce42d
おまけ:XenCenter 感想
起動が遅い(小学生並の感想)
これはハードウェアスペックに関係なく、サーバ自体の起動がやや遅いです(*BSDに比べて)
似たような製品の VMWare ESX に比べると対応しているデバイスドライバの数は多く、ハードウェア的な制限が低いのが利点、ぐらい。
XenServer の HCL。
http://hcl.xensource.com/
FreeBSD-CURRENT の環境を作る
Xen の DomainU で FreeBSD を動かしたいけれど、うまく動かないでの CURRENT の Xen kernel を作ってみることに。
FreeBSD CURRENT の作り方はハンドブックを眺めると書いてありますが、個人的にはあまりやらない作業なので、なにをやったかを記録しておきます。
やり方としては手抜きですが、仕事でやるときは丁寧にやってます、はい(明後日の方向を見ながら)
csup で使う supfile を作ります。これは cvsup のものを転用します。tag は . を指定します。
gomyway# cp /usr/share/examples/cvsup/standard-supfile /home/work gomyway# egrep -v '^#|^$' /home/work/standard-supfile *default host=cvsup3.jp.freebsd.org *default base=/var/db *default prefix=/usr *default release=cvs tag=. *default delete use-rel-suffix src-all gomyway# csup /home/work/standard-supfile
csup でソースを拾ってきてビルドします。kernel をインストールして新しい kernel で再起動します。
gomtway# cd /usr/src gomywat# make -j64 buildworld && make buildkernel && make installkernel gomyway# reboot
本来なら single mode で作業をすべきなのですが、手が届く端末ですし普通に。こういうことをやっていいのか、それとも駄目なのかは自分で判断してください。今回は素の試験環境なのでそのあたりは気にせずに。
installworld します。ややこしいことが嫌いなのでまたリブートします。
gomyway# cd /usr/src gomyway# make installworld gomyway# reboot
mergemaster で /etc を可愛がります。本来なら installworld の前にすべきなのですが、忘れてた。
また、面倒な mergemaster の代替ツールがあったはずなのですが思い出せませんでした。
gomyway# mergemaster
(cvd id を無視するの忘れてた)
本来の目的である CURRENT での Xen kernel を作ります。
gomyway# cd /usr/src gomyway# make buildkernel KERNCONF=XEN
前回手を抜いたビルドした kernel がどこに生成されるのかは…そりゃ /usr/obj 以下ですよね、アタシってほんと馬鹿。
gomyway# find /usr/obj -name kernel /usr/obj/usr/src/sys/XEN/kernel /usr/obj/usr/src/sys/GENERIC/kernel
installkernel 時になにかやっているわけではなさそうなので、ここから kernel をコピーします。
gomyway# sha256 /boot/kernel/kernel SHA256 (/boot/kernel/kernel) = caeef8f9882d7538c5a8f38e2488822b48f43f6fafdece80c8efade6ca548956 gomyway# sha256 /usr/obj/usr/src/sys/GENERIC/kernel SHA256 (/usr/obj/usr/src/sys/GENERIC/kernel) = caeef8f9882d7538c5a8f38e2488822b48f43f6fafdece80c8efade6ca548956m
こんな感じ。
本来の目的である DomainU での FreeBSD は状況変わらず。
# xm create -c ./xen.cfg Using config file "././xen.cfg". Started domain FreeBSD8.22_i386_DOMU WARNING: loader(8) metadata is missing! GDB: no debug ports present KDB: debugger backends: ddb KDB: current backend: ddb Copyright (c) 1992-2011 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD is a registered trademark of The FreeBSD Foundation. FreeBSD 9.0-CURRENT #1: Sun May 15 18:55:50 JST 2011 admin@gomyway.continue:/usr/obj/usr/src/sys/XEN i386 WARNING: WITNESS option enabled, expect reduced performance. panic: pmap_init: page table page is out of range cpuid = 0 KDB: enter: panic [ thread pid 0 tid 0 ] Stopped at 0xc0119c4a: movl $0,0xc0423af4 db>
どうするかね、これ。
FreeBSDのXen Kernelを作る
放置するのもなんですし、日々の調べ物を書くチラシの裏として活用しようかと。
しかしながら、内容が小出しになる、もしくは途中で無駄だと判断して中断することもあるので、答えが知りたくてググッてきた人には悪いかもしれません。
んじゃ、本題。
NetBSD 5.1 (AMD64)で動いている Xen 環境に DomainU として FreeBSD を動かしたいので、準仮想化用に使う Kernel を作ってみました。
いつもの方法で kernel を作ります。
gomyway# uname -rm 8.2-RELEASE i386 gomyway# cd /usr/src/ gomyway# make buildkernel KERNCONF=XEN
ここでちょいと迷ったのが、どこにビルドされた kernel があるのか分からない。面倒になったので、適当なパーティションを作ってそこにインストールしてから取り出すことにしてました。
適当にイメージファイルを作って mdconfig でメモリディスクをアタッチします。
gomyway# dd if=/dev/zero of=/home/freebsd8.2.img bs=1m count=1024 gomyway# mdconfig -a -t vnode -u 0 -f /home/freebsd8.2.img
ファイルシステムを作って bsdlabel で fstype を 4.2BSD に変更します。
gomyway# bsdlabel -w /dev/md0 a gomyway# bsdlabel -e /dev/md0 gomyway# newfs /dev/md0a
mount します。
gomyway# mount /dev/md0a /mnt
メモリディスクにカーネルをインストールします。
gomyway# cd /usr/src gomyway# make installkernel DESTDIR=/mnt KERNCONF=XEN
これで /mnt/boot/kernel/kernel に Xen kernel があります。
これを Xen ホストにコピーして DomainU として起動してみますが… OS起動時にpmap_init で落ちる。
# xm create -c freebsd.conf (snip) panic: pmap_init: page table page is out of range
ワケがわからないよ。
ググッてみたら、AMD特有の問題のようで 2011年1月ぐらいにFIX入っているみたいなので、後日CURRENT で Xen Kernel を作ってもう一度トライしてみます。
ファイルサーバにある動画ファイルを再生する
本年度もよろしくおねがいします。
さて、新年早々冬コミの戦利品を眺めていたところ閃いたというか、単に忘れていただけの「ファイルサーバにある動画ファイルを XBOX360 から再生する」というのをやってみました。
XBOX 360 では同一ネットワーク内に存在する Windows PC にあるメディアファイルを再生することができますが、ウチの環境では各種動画データをクライアント端末ではなく FreeBSD 7.1 にて稼働しているファイルサーバに集約させています。
このため、今回は FreeBSD に格納された動画ファイルを XBOX360 から扱うことができるようにするを目的とします。恐らく Linux でも同じ手法で達成することは可能であると存じますが、手元に Linux BOX が無いので試していません。
まず、前提となる Digital Living Network Alliance(DLNA)というか Universal Plug and Play (UPnP) によるストリーミングを達成するために必要なサーバソフトウェアを選定します。といっても良く分かっていないので適当にググってみました。
色々あって迷いますが、ここは定番の「ports にあるから」との理由で uShare を使ってみました。特に難しい設定は不要ですので簡単に導入できます。
下記に手順を提示します。
まずは ports からインストールします。
PlayStation 3 などの DLNA クライアントを利用する場合では WITH_LIBDLNA を有効にしてください。
# cd /usr/ports/net/ushare/ # make WITH_LIBDLNA=yes install
設定ファイルを編集します。
ここでは下記のみを設定します。
# cd /usr/local/etc # cp ushare.conf.sample ushare.conf # diff ushare.conf.sample ushare.conf 9c9 < USHARE_IFACE= --- > USHARE_IFACE=fxp0 21c21 < USHARE_DIR= --- > USHARE_DIR=/export/media
次に /etc/rc.conf に下記を追記します。
ushare_enable="YES" ushare_flags="-x -v"
バグがあるため XBOX を認識させるためには ushare.conf ではなく ushare_flags にてコマンドラインオプション "-x" を指定して認識させる必要があります。また "-v" はお馴染みの vervose でログメッセージを出力してくれますので、導入初期はこの出力を確認して挙動を確認します。
そして uShare デーモンを起動してみます。
# /usr/local/etc/rc.d/ushare start Starting ushare.
ここで XBOX360 のダッシュボートから [Xbox360] → [ビデオライブラリー]を選択すると、機器の選択画面にて ushare という項目が表示されます。(ushare の名称はデフォルト名。ushare.conf の USHARE_NAME にて設定可能です)
しかしながら、日本語を含むディレクトリ・ファイルを正しく処理できないようで本来は存在しているファイルが表示されない現象が確認できました。
いつものことなので、ソースを漁ってみます。
# pwd /usr/ports/net/ushare/work/ushare-1.1a/src # grep setlocale * Binary file ushare matches ushare.c: setlocale (LC_ALL, ""); Binary file ushare.o matches
ushare.c にて locale を殺しています。iconv を使ってどうにかしてみようとしているらしいですが、ushare のログを見るとどうも上手くいっていないようです。
Jan 1 14:11:36 azusa uShare[96941]: Freeing entry invalid name id=1923 [初音ミク]
よく分からないので、ファイルサーバとして稼働している samba の内部エンコーディングに設定してある EUC-JP をハードコートしてやっつけます。また、最近の Linux ならすべて UTF-8 を前提としているので UTF-8 になるんじゃないかと。
ushare.c の差分はこんな感じです。
# diff ushare.c.org ushare.c 735c735 < setlocale (LC_ALL, ""); --- > setlocale (LC_ALL, "ja_JP.eucJP");
ports 用に patch を作ります。これは既存の patch に追記させます。
# cd ../ # diff -c src/ushare.c.org src/ushare.c >> ../../files/patch-ushare
綺麗にしてからビルドして再インストール、デーモンの再起動を行います。
# cd ../ # make distclean # make deinstall && make reinstall # /usr/local/etc/rc.d/ushare restart
これで日本語を含む場合でも正しく処理がされます。しかしながら、前述のようにやっつけな方法ですので、誰か iconv を使ったエレガントな方法を教えてください。(今の FreeBSD の iconv は CP932 とかも使えるようになってますし)
また、某動画投稿サイトから動画ファイルを引き抜いて flv 形式から mp4 形式に変換している人への注意点ですが、mp4 形式の動画ファイルについては拡張子を m4v にする必要があります。
これは拡張子が mp4 であるファイルは音声ファイルとして扱われることが原因となっているようです。個人的には拡張子だけでファイル形式を判断するのはどうかと思いますが、オーバーヘッドの関係じゃないかなぁ、と邪推してみる次第です。
また、XBOX360 でサポートされるフォーマットなどについては下記を参照してください。
http://support.microsoft.com/kb/945416/ja
シヴィライゼーション・レボリューション(FIRAXIS GAMES/2K GAMES)
http://www.cyberfront.co.jp/title/civ_revo/
http://www.civilizationrevolution.com/
廃人育成で有名なターンベースなストラテジの「Civilization」コンシューマ版です。
本作品は PC 版の 4作目をベースにかなり遊びやすい構成になっています。
個人的にはストラテジは今は亡き Ensemble Studios 社の「Age of Empires」の 1作目の拡張パックである「Rise of Rome」で手を引いています。冒頭で述べたようにこの手のストラテジは廃人を生み出しやすく、当時はテレホタイムにずっと iwango(これ知ってる人いるかな・・・)に入り浸って対戦を繰り返す状態で、さすがにこれはイカンと泣く泣く手を引いた過去があるわけです。
また、以前になんとなく PC 版「Civilization IV」の DEMO をやってみたのですが、悪い病気がまた再発しそうなり断念していたところにコンシューマ版の発売が発表されたわけです。
確かにコンシューマということでカジュアル気味なバランス調整になっています。内政がある程度育ってしまうと、都市が腐ることがないので後半はデメリットが無かったりと。
しかしながら、このあたりの微妙さが面白いです。近年は複雑化しがちなストラテジでありながら、ある程度割り切った単純化とヘルプなどのインターフェイスが充実しているので、このジャンルにはじめて触れるのであればオススメの 1本かと。
まあ、「もう1ゲームだけ」とかやりだすと、簡単に廃人への道が開けるようになりますけれどね。
実績の「平和のための戦い」がどうも難しかったので、ちょっとメモを晒してみます。条件は「国王以上の難易度で、西暦1000年までに勝利する」なので慣れていないと時間制限が厳しい内容となっています。また、高難易度の CPU なので早い段階で防衛のキモである弓兵を生産されてしまい敵の都市を落とすのが難しくなってきます。
まず、敵都市とアーティファクト、および蛮族の位置を確認します。新規ゲームを選択してセーブをして数ターンは捨てゲーとしてマップを確認します。ここで付近に敵都市が2つ以上無い場合は、マップが悪いので再度新規ゲームから開始します。
ゲーム開始時の付近の配置に問題が無い場合は、ロードをしなおして最短の手順で蛮族をフルボッコにしてから敵都市を最低でも2つは落とします。うまく行けばこの時点で大将軍を作ることができます。
あとは騎兵を大量生産して大将軍やエリートの補正を使って落とすだけ。ね?簡単でしょう?
余談ですが、どうもシングル戦の戦闘結果は固定臭いです。負けるときは負けてしまうので、これは素直に諦めて物量で押し切るしかないかと。