2013年4月25日木曜日

vimのScalaシンタックスハイライト, mongodのサービス登録

vimにScalaのシンタックスハイライト追加

(NeoBundle追加済み)

git clone https://github.com/scala/scala-dist
でクローンして、

cp scala-dist/tool-support/src/vim/* ~/.vim/vimfiles/

でコピーしておく

vi ~/.vimrc
(.zshrcに alias vi='vim'設定済み)


set runtimepath+=~/.vim/vimfiles/
syntax on


がされていれば動くはず!

mongodの起動スクリプト登録



手軽に使えるMongoDBの起動スクリプト - Shoken OpenSource Society

を参考に。

git clone https://github.com/syokenz/mongodb-init-script

mongodを/etc/init.dに
mongo.confを/etc/mongo.confにコピーして

中身のディレクトリ指定を適宣書き換えて

sudo service mongod start

で走ったのでおk

2013年4月20日土曜日

oh-my-zshの覚書


まずはzsh入れておく
sudo yum install zsh


オートスクリプト

wget http://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

手動

git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
chsh -s /bin/zsh

.oh-my-zsh/pluginsに入ってるプラグインから有効にしたいのがあれば
vi .zshrcで(git)のトコにスペース区切りで追記してリロードする
plugins=(git redis-cli github history-substring-search sbt scala screen yum)

こいつもついでに書いておく

export LANG=ja_JP.UTF-8
export LC_CTYPE="ja_JP.UTF-8"


参考




2013年4月17日水曜日

PlayとMongoとRedis連携試してみる


Play


Play frameworkのインストールと設定…2.1を公式からDLして適当に入れて行けるかと思ったけどなんかちょっとややこしそうなのでググってみた。

おっとけよ CentOSにPlay frameworkインストール

を参考にすすめてみる。
無事動いたブラウザから見えた。


VMWareの共有フォルダ機能を有効にしておく
@IT総合トップ > Linux & OSS > Linux Tips Index > VMwareのフォルダ共有機能を使うには
を参考にした。

VMWareの管理>仮想マシン設定>オプション>共有フォルダ
とりあえずshareってフォルダを作成

ln -s /mnt/hgfs/share share
でシンボリックリンク貼っておく

mongoDB


まずはplay関係なくScalaから使える状態に。

cd share
mkdir mongoTest
cd mongoTest

ITの波間にゆーらゆら mongodb+casbah+scala
グニャラくんのwktk運営日記 Scala + finagle + MongoDB + Herokuで2chクローンを作る(連載第2回)
mongoDB公式 1.Getting Started を参考に。


vi build.sbt

name := "mongo test"

version := "1.0.0"

scalaVersion := "2.10.0"

organization := ""

libraryDependencies += "org.mongodb" %% "casbah" % "2.5.0"


保存して
sbt




[success]

って出たのでおk


mkdir -p src/main/scala/mongo.casbah/

vi src/main/scala/mongo.casbah/Sample.scala


package mongo.casbah

object Sample extends App {
  println("Ahhhhhhh")
}


でsbt run


Ahhhhhhh

と出たのでこれもおkっぽい


早速Mongoに繋ぐ準備をしてみる


vi src/main/scala/mongo.casbah/Sample.scala

package mongo.casbah
import com.mongodb.casbah.Imports._
object Sample extends App {
        val mongoClient = MongoClient()
        val mongoDB = mongoClient("casbah_test")
        val mongoColl = mongoClient("casbah_test")("test_data")
        val newObj = MongoDBObject("foo" -> "bar", "x" -> "y", "pie" -> 3.14, "spam" -> "eggs")
        val builder = MongoDBObject.newBuilder
        builder += "L2P" -> "NOOB"
        builder += "kek" -> "bur"
        println(builder.result)
        println(newObj.get("foo"))
}


sbt run

[info] Set current project to mongo casbah test (in build file:/mnt/hgfs/share/sbt-mongo/)
[info] Running mongo.casbah.Sample
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
{ "L2P" : "NOOB" , "kek" : "bur"}
bar
[success] Total time: 4 s, completed 2013/04/17 16:56:52

とりあえずセットとゲットはできてるので良しとする。
Playとの連携はまた後ほど調べる。

Redis

Ruby Diary redisインストール(CentOS 6.2) 
を参考にしつつバージョンだけ変えて実行
wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz
tar xzvf redis-2.6.12.tar.gz
cd redis-2.6.12.tar.gz
make
sudo make install

問題なく終了

redis-server

で起動し、

redis-cli
redis 127.0.0.1:6379>set 1 aaa
OK
redis 127.0.0.1:6379>get 1
"aaa"

動いてるのでおk

developer's diary redis 2.2.12のインストールメモ(amazon Linux)
をまるっと真似してinit.dで起動時実行設定しておく

Play-Plugin-Redis

https://github.com/typesafehub/play-plugins/tree/master/redis

README.md参照にしつつ

play new sampleApp
cd sampleApp
vi project/Build.scala

val appDependenciesのトコに

"com.typesafe" %% "play-plugins-redis" % "2.0.4"

追加して保存

vi conf/play.plugins

550:com.typesafe.plugin.RedisPlugin

と書いて保存

vi conf/application.conf

ehcacheplugin=disabled

と追加して保存

play update

[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: com.typesafe#play-plugins-redis_2.10;2.0.4: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::

と出るので、repoをチェック

http://repo.typesafe.com/typesafe/releases/com/typesafe/

一覧を見ると

play-plugins-redis_2.10/

があるのでそこを開いて見てみる

2.1-09092012-2/           13-Jan-2013 01:10    -
2.1-1-RC2/                16-Jan-2013 01:10    -
2.1-RC2/                  13-Jan-2013 01:10    -


RCは避けたいので2.1-09092012-2と言う怪しげな名前のにしてみる
vi project/Build.scala
"com.typesafe" %% "play-plugins-redis" % "2.1-09092012-2"

に修正。

play update

[error] (*:update) sbt.ResolveException: unresolved dependency: org.sedis#sedis_2.10.0;1.1.0: not found

今度はsedisが見つからんとな
ググって見るとこんな記事が見つかった。

Using Redis PubSub with Play 2.1.0

ここに書かれてる通りにresolverを追加してみる。


vi project/Build.scala
import sbt._
import Keys._
import play.Project._
object ApplicationBuild extends Build {
  val appName         = "sampleApp"
  val appVersion      = "1.0-SNAPSHOT"
  val appDependencies = Seq(
    "com.typesafe" %% "play-plugins-redis" % "2.1-09092012-2"
  )
  val main = play.Project(appName, appVersion, appDependencies).settings(
        resolvers += "org.sedis" at "http://pk11-scratch.googlecode.com/svn/trunk"
  )
}


こんな感じに。リトライ。

play update




[info] Done updating.
[success] Total time: 19 s, completed 2013/04/17 16:24:45

成功した模様。とりあえずここまで。

Minecraft久しぶりにやってみた

VPS契約したので、折角だからマイクラサーバーを久々立ててみた。

Bukkitがまだ対応してないので、Official jarでSMP Modもまだ未対応なのが多いからとりあえずVanilla。

前回やってた時は1.2.5だから、随分変わってるなー



しかし木は一括伐採Modが欲しい。Forge入れれば対応させられるんだけど、クライアント側にも入れないといけないのがめどい。



ジャングルツリーは普通に伐ると途方も無い労力が…葉っぱの中に埋もれた残りがあると救いようがないしね。


階段上に伐って行けば足場は要らない



残存兵が潜んでないことを確認。




スタート地点はジャングルと砂漠。すぐ近くにNPC村もあったので、そこを拠点に。



NPCが取引してくれるようになったのね。なんか小麦でエメラルドくれる人がいた。超便利!と思ってたのに、気付いたら居なくなっていた…ゾンビに殺された?



NPC村の足下からゾンビの声やらコウモリの声が聞こえるので掘ってみたら洞窟に繋がってた。
とりあえず明かりを撒きつつ鉄を確保



順調に石炭も集めつつ近場は制覇。しかし坑道に繋がってるし更に奥は深くて断念。
来週末の楽しみにとっておこう…




(文字通り)羊を被った奥様




Skelyに蜂の巣にされた図。Skyrimみたいに暫くの間矢が残るようになってカオス。
頭頂部や後頭部に矢が刺さった状態で走り回る姿はちょっとしたホラー



息子と奥さんと。週末に外出やら旅行やらもせずに家族でマイクラか。おめでてーな。




(この画像は次の日)
速攻でダイヤ鉱脈を2つ掘り当ててそれぞれ6個も出て早速エンチャント台を自宅に作ったの図。
牛牧場も離れた箇所にだが作って牛革大増産計画。

地図が拡張可能になったりコンパス・時計とかも額縁で飾れるようになっててテンション上がる。
しかし地図を盛大に拡張すると縮小されちゃうのは残念だなあ。
位置を見極めて地図を生成し、額縁を並べる事で巨大マップみたいにして飾れるかな。
ちょっと楽しみ。

2013年4月16日火曜日

CentOS 6.4にScala, PlayFramework, mongdb, redis辺りのインストール


VMwarePlayerにcentOS 6.4のインストール


新規OSのインストール
http://ftp.riken.jp/Linux/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-netinstall.iso
をダウンロード、イメージの選択からこいつを選ぶ

OSの種類はRedHat6 64bitを選ぶ

イメージの場所は
http://ftp.riken.jp/Linux/centos/6.4/os/x86_64/CentOS-6.4-x86_64

余計なものは一切入れないで進める

OSインストール終わったらrootでログイン

useradd (ユーザー名)
passwd (ユーザー名)
visudo
root ALL ALL~の箇所をyank pasteで
(ユーザー名) ALL ALL~に
exit

追加したユーザーでログイン


見辛いのでコンソールの文字色変える
http://server-setting.info/freebsd/color-display.html 参考

vi ~/.bashrc_profile
export LS_COLORS='di=1;36:fi=0:ln=1;95:so=1;91:pi=1;91:ex=93:bd=1;91;46:cd=1;91:or=1;37:mi=1;37:*.rpm=1;92'
source ~/.bashrc_profile

先にzsh入れるべきだったかな…


各種ツールインストール

sudo yum install wget
sudo yum install java7
sudo yum install unzip
sudo yum install git

Play Frameworkのインストール


wget http://downloads.typesafe.com/play/2.1.1/play-2.1.1.zip
unzip play-2.1.1.zip
mkdir ~/bin
cd ~/bin
ln -s ~/play-2.1.1/play play

play help
動けばおk

mongodbのインストール

wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-2.4.1.tgz

tar xzvf mongodb-linux-x86_64-2.4.1.tgz

sudo mkdir -p /data/db
sudo chown (ユーザー名) /data/db

mv mongodb-linux-x86_64-2.4.1 mongodb

./mongodb/bin/mongd --version
動けばおk

Scalaのインストール

個別にREPL使ったりなんだり色々弄りたいので、Playとは別にScalaインストール

wget http://www.scala-lang.org/downloads/distrib/files/scala-2.10.1.tgz

tar xzvf scala-2.10.1.tgz
vi .bashrc_profile
PATH=$PATH:$HOME/bin:$HOME/scala-2.10.1/bin
source .bashrc_profile

scala -version
動けばおk

casbahのインストール

git clone git://github.com/mongodb/casbah


gcc/makeのインストール

sudo yum install gcc
sudo yum install make

redisのインストール

wget https://redis.googlecode.com/files/redis-2.6.12.tar.gz
tar xzvf redis-2.6.12.tar.gz
cd redis-2.6.12
make
sudo make install

sudo /usr/local/bin/redis-server -v
動けばおk



とりあえずここまで。

2013年4月11日木曜日

RTSのスゝメ

RTSと言うゲームジャンルをご存知だろうか?

Real Time Strategy Game

日本語にするなら、リアルタイム戦術ゲーム。
よくある例えでは、将棋をリアルタイムで指すことができる対戦ゲームと言われる。


しかし、実際には将棋とは大きく異る点がある。

一つ目は

「相手の駒が見えない」

と言う点だ。

将棋は1ターンずつ交互に指し、相手の駒がどう動いたかが見えるのでそれによって戦略・戦術を変えて行く事ができる。

RTSではそれができない。ただし、自分の駒の周囲だけは見る事ができるので、定期的に敵陣に自分の駒を送ったりして偵察することが必要になってくる。


二つ目は

「駒は規定の種類規定の数では無く、自分で選んで作る必要がある」

と言う点。


例えば、歩を100枚作り出して攻めこむ事も可能だし、飛車を10枚作って蹂躙しようとする事も可能だ。
(ただし、作り出すのにコストや条件が必要になる。当然、歩のように弱い駒は安くすぐに作れるが、飛車や角のような強力な駒は生産するのに高コスト長時間が必要となる)



主にRTSのゲームの流れは以下のようになる。


  • 開始直後は自軍の基地と僅かな作業ユニットのみでスタート
  • 拠点近くから資源を獲得し、それを消費して戦闘ユニットの生産を開始する
  • 敵の拠点を探索し、「どんな戦略を取っているか」を調べ・予想する
  • 敵の主力となりそうな兵種に対抗して有効な兵種を揃える
  • 自軍が最も勝ちやすいタイミングを図り、敵軍と戦闘する
  • これらの間に新たな拠点を別の資源近くに建設し、より多くの資源を集められるようにする
  • 同様に敵も新たな拠点を作る筈なので、それを阻止すべく他の資源付近を偵察する
  • これらを繰り返し、敵軍の拠点を全て破壊すれば勝利
古くはDUNE、COMMAND&CONQUER、WAR CRAFT、Age of Empire等から
比較的最近ではWarCraft III、RED ALERT 3、WARHAMMER 3000、Age of Empire III、StarCraft IIなどシリーズ物は出続けている。

変わり種として版権物、the Lord of the Ringsや Star Wars物などのRTSもあるが、大ブレイクする程には至っていない。


余談だが、WarCraft IIIのMODとして登場したユーザー作成マップ Defense of the Ancients通称DOTAの派生、DOTA ALL STARSを作った面子が会社を興してリリースしたのが

League of Legendsと言う、現在世界で最も売上高の多い(?)ゲームである。

(画像は4gamerより)



で、RTSの魅力について。


将棋や囲碁、チェスなどの戦略ボードゲームはじっくりと一手一手考えながら対戦を行い、相手の知力を上回って勝つ事が楽しみの根源だ。

RTSもそれはほぼ等しいと言えるだろう。
それにプラスして、駒を操作する動きを洗練する必要がある。
「待った」も「持ち時間」も無い。

やるべき事が多すぎて、楽しめないとか
操作が追いつかないから楽しめないとか
RTSを敬遠する理由はそこら辺にあるのも理解できる。

しかし、どちらかと言うとそれらは案外どうにかなる事が多い(ゆっくりでもちゃんとアンチユニットをぶつける、或いはタイミングをしっかり読む、或いは最も有利になる場所で戦う、等を徹底すれば)

それよりも最重要なのは

「常に複数の事を同時に並行して行うこと」

だと思う。

  • 偵察する
  • 生産する
  • 開拓(拡張)する
  • 主力部隊の戦闘をする
最低でもこれらの作業を並行する必要がある。
更に余裕があれば、
  • 敵軍の妨害をする
これも追加されてくる。


刻一刻と変わる戦況、多くの情報、それらを元に瞬時に…まさにリアルタイムに戦略を練り直し、対応して行かなければならない。

これこそが、RTSの魅力だと思う。


実は僕は将棋とかの方がよっぽど万人向けでは無いと思っている。
何故かと言うと、将棋や囲碁、チェスは「打てる手」がルールによって明確になっていて「何手先まで読めるか」勝負になってくる面が大きい。

何手も先を読む能力は中々身につく物では無いし、人によっては全く身につかないと言うケースもあるだろう。
だから生涯の趣味としてのんびりじっくり付き合う、って言う人も多いんだろうけど…


RTSでももちろん先を読む事は重要ではあるのだが、どちらかと言うと「何手先にこうなる」と言う確定事象は無い。何故かと言うと、お互いの主力兵士がぶつかったとして、その時の戦闘結果は自軍の圧勝だったとしても、ある違うタイミングもしくは違う場所で全く同じ軍隊構成でぶつかったとしたら敵軍が圧勝する可能性もあるからだ。


基本的には、兵種で有利・数で有利ならほぼ毎回同じ結果になる。
ただ、そこに地形効果が加わると話が変わってくる。


実際の戦争でも良くある話だが、開けた場所ならほぼいつでも総力戦になるが狭い土地なら前線に居る兵士以外は手持ち無沙汰になったり、高い場所から低い場所へは有利な攻撃ができたり、そして当然城攻めは守りが有利で攻撃は不利だ。

こういった複雑な要素が絡み合う為、上手く行けば不利を覆して有利に持ち込む事が可能なのもRTSの楽しさの大きなポイントだろう。


とは言え、将棋の「何手先まで読む能力」と同様に「一瞬で”引くべきか押すべきか”を判断する能力」も身につきにくいんじゃないか、と言われる可能性もあるが…


ちなみに、日本では文学の世界でも歴史物は強く、SFは少数派と言われているがRTSでも当てはまる。

世界では最も人気だったStarCraftも日本では全く人気が出ず、MicrosoftのAge of Empiresと言う歴史物の方が大人気だった。

StarCraft



Age of Empires


AoEはちっちゃいユニットがちまちまと木苺をざるに入れて運んだり、ガゼルや象を槍で倒して肉を切り取って運んだり、魚をモリで突いて運んだり…って言う様子が可愛らしくてミニチュア感溢れてたのは確かなんだけど。




最近の強い人達には自分も全く歯がたたないので、もっぱらvsAIでCOMをタコ殴りにして満足してるだけだけど、それでも十分面白い。


そしてStarCraft IIの魅力がもうひとつ。

それは、キャンペーンモード(シナリオモード)が面白いって事。
StarCraftから始まったストーリーが拡張パックBrood Warで更に広がり、10数年の時を経てStarCraft IIに繋がり、そこから更に3年が経過して拡張パックHeart of the Swarmで一つの終焉を迎えた。




折角なので、話のさわりを。


----------------------------------------

遠い未来、地球の銀河系とは異なる銀河。
複数の惑星からなるテラン同盟の支配に対し、反旗を翻した団体があった。
アークトゥルス・メンスク率いる「コーハルの息子達」がそれであり、プレイヤーはその団体の一員として打倒テラン同盟を掲げて戦いを繰り広げていく。

その過程で、とある惑星に現れた異星種族ザーグとそれを見つけて討ち滅ぼさんとする高等文明種族プロトスも交えた三つ巴の戦争が広がっていき、メンスクはザーグをおびき寄せる特殊な電波を使ってザーグをおびき寄せ、プロトスを滅ぼす作戦を主力メンバーのジム・レイナー、サラ・ケリガンに実行させた。

目論見通り、その星のプロトスはおびき寄せられた大量のザーグによって滅ぼされ、その作戦の要であるケリガン(ゴーストと呼ばれる、超能力者部隊の一員。特殊な電波を扱うのに必須だった)は自らがおびき寄せた大量のザーグに囲まれ、任務完了を伝えて自らの回収を無線で要請する。

この時、既に母艦へ帰還していたジムは迎えを早く出せと言うがメンスクはこれを却下し、既にザーグで溢れかえった地上へは降りられない。作戦は成功し、犠牲は付き物だと吐き捨てて戦艦ごとワープする事を命令した。


メンスクはこの後めでたくテラン同盟を打ち倒し、テラン帝国を建国。
自らをアークトゥルス・メンスク一世とし、皇帝として世界に君臨する事になる。
見捨てられ、ザーグに飲まれて消滅したサラ・ケリガンと恋仲でもあったジム・レイナーは失意に打ちひしがれつつも今度は打倒ザーグ、打倒帝国の反乱軍としてプロトスと共闘。プロトスのフィーニックスと親友になりながらザーグと戦って行くうちに…

----------------------------------------

と、まあこんな感じでいかにもAメリケン(エィメリケンと発音する)テイストなB級と言うかハリウッド的な展開やキャラが満載、様々なキャラの思惑やら野望やら熱いストーリーで先が気になって仕方ないよ!ってなる事間違い無し。



スタクラ2は、OPを除き、ゲーム中のムービーシーンがリアルタイムレンダリングなんだけどそのクオリティがまた凄い。プリレンダリングムービーと見紛うほど。

Blizzardはプリレンダリングムービーのクオリティが高すぎて失禁するレベルなんだけど、リアルタイムの方も凄い事になってて眼を見張ること請け合い。是非是非、一度は見てほしい。
Win/Mac両対応してるので、1本買えばどっちでも遊べるし。

StarCraft II Wings of LibertyのOPムービー(プリレンダ)


In Game Cinematicを複数合成したTeaser Trailer(リアルタイムレンダ(一部プリレンダ))
かっこよすぎワロタ


韓国ではITバブルのタイミングとPC房が流行るタイミングとスタクラが出たタイミングが合致したせいか、国家挙げての大人気タイトルになってしまったスタクラ。
プロプレイヤーの一部は軍役が免除されたり、逆に軍隊からスカウトが来たり、日本では考えられない程盛り上がってるのになー。もっと日本でも流行るといいな!

そんな訳で、みんなもRTSやろうぜ!

2013年4月10日水曜日

もやしもん 12巻を読んで

青春だなあと思ってなんかこう甘酸っぱいものが…
と言うオッサン臭いことは置いといて。


西野さんことキレデレJKが思い悩み、主人公たちが一緒になって悩む


「大人になる」


と言う事について。
今日一日なんとなく考えてみたんだけど、僕の考える結論はこうだ。


大人になると言う事は、子供でいる事を諦める事


それはそれ単体では良い事でも悪い事でも無いんじゃないかな。




まず、人間の成長について以下のように考えた。



  • 赤ちゃんの頃は、まだ何も考えない時期。
  • 保育園や幼稚園では、良い事悪い事の区別も分からない時期。
  • 小学生は、理由を追求する事なく大人の言う事に従う時期。
  • 中学生は、理由も分からず大人の言う事に反発したくなるが、行動で飛び出す事ができない時期。
  • 高校生は、自らの意思で何かを行動できるようになり、それが楽しくて何も考えず行動する時期。
  • 大学生は、自由が大きくなり「大人になった」と錯覚するのに、世の大人たちから「大人になれ」と否定されるが、そんな大人たちと今までよりも深く接する事で理解を深める時期。
  • 新社会人は、今度こそ大人になったと思いつつも、実は今までよりも自由が無くなり軽く絶望をする時期。
  • 社会人として幾年か経ち結婚をして子供が産まれた時…
    全ての面で子供でいる事を諦めなければならないと悟り「一人の大人であろう」と、そして自らの子供に対して「この子を立派なオトナに育てよう」と決意して初めて
    「大人になると言うこと」を理解する時期。



「大人になれ」

この言葉には、どうしても「今すぐ成長し、俺の言う事を正しく理解しろ」と言う意味が含まれているように感じてしまいがちだ。


しかし、そこには言外のあらゆる意図が篭められていると考えずにいられない。

子供に何かを教育・躾として叱ったりする時、反発してきた子供に事細かな背景事情やケースバイケースの具体例の説明、それら選択肢全てに及ぶ状況説明からその結果至る事象の網羅は不可能だ。



「君がまだ知らない事、考えはしても実感はした事が無い事、そういった物事が世の中には沢山ある。そしてそういった物事は君の予想を遥かに超えて大きくのしかかって来て、君を潰そうとしてくる。だから、それに備えなさい。」


と言う警告だと思っている。そしてそれとは別に、



「いつか年を経てお前が様々な経験をして振り返った(=大人になった)時、その時に思い返してそれでもまだ同じ気持ちでいられるならそれも一つの人生なんだろうな」と言う、自分は諦めてしまった「子供でいられる事」を今現在していられる子供に対する羨ましさ、眩しさも含まれている気がする。


言われる方は、今すぐ大人になれって言われても無理だろ、そうやって勝ち目の無い戦いを突きつけて勝ち逃げすんな!そんなのは逃げ口上だ!と言う反発を抱くだろう。


しかし現実には理不尽な事が横行し、理屈が通用しない仕組みが多数あり、正義と悪の二元論では片付かない事ばかりだ。

保護者の庇護下から離れ、たった一人で何億人もの他人の中で生きて行かなければならない人生。

綺麗事だけで生きて行くのもアリだが、それはきっと「子供」が想像するより遥かに困難な事。
敢えて困難な道を往こうとする若人には、老人は警告するくらいしかできない。


だから、「大人になれ」と言われても全てを無碍に否定せず言われる事すら拒否したりせず

「自分がまだ知らない世界もあり、そこで生きて行くには対抗する術を用意しなければ」

と自らを奮い立たせてくれればいいな、とおじさんは思うのでした。




余談だが、「子供でいる事を諦めた人間が大人」であると最初に結論付けたが、逆説的に言えば
「何歳であっても保護者(的立場の存在)の庇護を受け、自らの人生を自らの手で管理しない人間」
は、大人では無いと言える。


この手の人間が自身をどう思ってるか、とか周りがどう扱うか(大人と呼ぶか子どもと呼ぶか)は実際どうでもいいんだが、上記した成長の過程と共に自分の人生の手綱を誰がどう握り、そしてそれを自分自身で握りしめていく方法を学ばず育つので、何か「危うい」人間に見える。


そういう人間が居る事が悪だとか善だとか、社会が間違ってるとか正しいとかはどうでも良い。
ただ、そのまま「子供で居続けられ、そしてそのまま死ぬ」なら、問題は無いのだが…
どこかでそれが破綻した時、上記の成長の過程をすっ飛ばしていきなり社会に放り出されたら。
その人にとって、それは果てしない不幸であろう事は予想に難くない。


自分が子供を愛するならば、それはいつまでも子供にし続ける事が親の愛では無く
子供をいずれ独り立ちさせ、自分の事を嫌ってでもいいから「大人になれ」と言い、願う事こそが大事なんだろうな、と思った夜だった。







で。本編に関しては全然触れてなかったので一応。

結構楽しい一冊だった。
久しぶり過ぎたのでどんな内容だったかネットでググったら、結構批判だらけだったので戦々恐々してたんだけど。


  • 寮の先輩達と雑魚寝してる時に、未だに名前の無い先輩が「沢木、何か悩んでんのか」とかそれに対するやり取りだとか
  • 初めて女子と一緒に過ごす夜のくだりとか
  • そんな噂になってそうな女子と一緒に登校して色々勘ぐられてあーだこーだ言われたりするのとか
  • 深く話し合う事無く行き違い、勝手に相手の気持ちを想像したまま憤ったり諦めたり達観しているから起きたスレ違いと、そこで正面からぶつかって無くなるわだかまりとか
  • 子供ってなんだろう、大人ってなんだろう。それに対して分かったつもりで口を開く人間も実際何もわかってないよね、って事とか。


予想してたよりずっと楽しめた。

純潔のマリアとかも随分ご無沙汰だし、最近遅筆っぷりがすごいみたいだけど。
まだまだ純粋に面白いマンガだなーと思った。オススメ。


2013年4月8日月曜日

EQにっき2

昨日の続き。

Vendorのデータを更新したら、なんかIDが古かったらしくて売ってる物が滅茶苦茶になってしまっていたので結局revert。


Sol-CにもEpicにも繋がるので、Mag御用達のNajenaへ。
道中、Nekutulosで地面に埋まったりLavastorm MountainへZoneした瞬間に溶岩に入っていて死んだりNecのBOTでSummon Corpseしたりと大変だったが…





てことで、いつ見てもテーマパークのエントランス的なNAJENA。

このZoneはダークエルフの3姉妹(長姉・次女・末弟)の収めるダンジョンで、初期の頃は次女Drelznaが出すJourneyman Boots(移動速度アップの魔法が無限に使える)が大人気で、本当にテーマパークよろしく長蛇の列で順番待ちが発生していた。

ズナっ子の部屋の前の階段は冒険者達で溢れかえり、順番待ちで暇を持て余した冒険者達の群れに遭遇する哀れな巡回Ogre Mobは文字通りの瞬殺で死体を晒すハメになっていた。


余りにも順番待ちが酷く、トラブルも多かった為ズナっ子はJourneyman Boots通称JBをDropしなくなり、よりワールドワイドなQuestでの入手へと変更がなされた程である。

元々、攻略型ダンジョンで鍵を順に入手していかなければならない仕組みや、その鍵がログアウトすると消滅するタイプだったりして面倒くさがりな世界中の冒険者達からはそっぽを向かれ、その後ずっと閑古鳥が鳴く寂れたダンジョンと成り果ててしまった。


でも、個人的には好きなんだよねここ。

入り口から少しずつ進行し、最初は隠し通路の奥から地下へ行きゾンビカエルのBoneCrackerから鍵とアイテムを入手、隣の部屋からOgreのCaptainをぶち殺して更に鍵をゲット。

末弟のRathylの部屋まで落とし穴に注意しながら地下の牢獄エリアに向かって鍵を使って部屋に入り、Rathylを倒すとSkeletonになって再度襲い掛かってくるギミックとか当時はアツかった。



Rathylから次女部屋への鍵を入手してズナ狩り



更にそこから長女ナジェ子の鍵を入手してナジェ子部屋へ。

例によってハズレPop(Place Holder)が湧いていて、ナジェ子不在。
華麗にPHを除去してナジェ子部屋でCamp。懐かしいなぁ…しかしココ、Respawnするまでの時間が結構長いんだよね。30分ぐらい?
当時はこの時間やる事が無いから、チャットして過ごすしか無かった訳で。今みたいにブロードバンドでも無かったしPC性能もキツかったから、裏で他の作業したり動画を見たりとかは不可能だったしね。そのお陰で、ゲームのチャット程度なら英語でもなんとか理解できるようにはなった訳で無駄では無かった感じではある。
他には、普段使わないSkillの練習をしたり言語の訓練(ゲーム内でも言語があり、種族や生まれによって扱える言語が異なっていた。そのスキルが低い場合はチャットの文章が文字化けして見える)
例えばMagicianは召喚士なので召喚系等の魔法、Conjurationのスキルや攻撃系のEvocationは得意だが、滅多に使わないAlterationやDivinationのスキルは意識的に訓練しないと上がらなかった。

Campで暇なときにそういうスキルを上げるために、消費Manaが少ない連打出来るSpellを買っておいて練習するのが常套手段だったりした。みんな大好きTrue North(Divination系統で、自分が真北を向く)とかSee Invisible(Divinationで透明化している対象が見えるようになる)のEffectはみんな見慣れているのはそのせいだ。




そんな訳でPopしたNajenaを…と思ったらFabled NajenaがPop。
Fabledってのは、上に書いたように昔有名だったMobが強力になって帰ってきたイベントのMob。DrelznaもJBを引っさげて(しかもFabled Journeyman Bootsとなり、より強力なアイテムになっている)帰ってきてたり、なんて言うかお祭りネタだった。
現在のLive(本家サーバー)でも生存してるかは知らないけど、ここでは確率でPopする。DB覗いてみたら10%の確率らしい。意外と湧きやすいんだな。Lvlも高めなので勝てるか分からなかったけど、まあいけるだろうと言う軽いノリで戦闘開始、危なげなく勝利。


Fabled Flowing Black Robe、当時はFBRと呼ばれていて、見た目も独特だったのでCaster(魔法使い)職に人気だったRobeのFabled版ゲット。



Mag用のSol-Cクエスト素材であるホウキ(風)、シャベル(土)、松明(火)、コップ(水)もゲットしたし、あとはEpicの水の巻物だけゲット出来なかったけど、それはいずれ。
懐かしのNajenaを満喫し、今日のところはこれぐらいで勘弁してやった。





EQにっき


久々にEQネタを書いていたらやりたくなったので、本家では無くエミュを動かしてみる事に。
Visual Studio2012をインストールしてCMAKEをインストールして適当にコンパイルして動いたのでそのままプレイ。

目標は当時達成出来なかったMagのEpicを取得する事!

我が故郷では無く、折角なのでチュートリアルゾーンのクエストを一通り終わらせてからPlane of Knowledgeへ。

いつものメンバーをBOTで作成し、召喚。
XP増加率をアップしてあるのでサクサクレベルが上がってしまう。もうちょい下げるべきだな…

あっという間に14になってしまっているので、Spellも揃えつつクエストでもやりたいなーと思ったが
Newbie Class Armorは既に何度かやってるし、Sol-Cクエストまでは適当にダンジョンでも回るかな

Vendorのアイテムが少ないな。と思ってMerchantlist更新のSQLファイル落としてきて入れようと思ったら、すっごいバグバグで大変だった。
てかさ、コピペするのはしょうがないとしてもさあ間違った箇所をそのままコピペすんじゃねえよ!

しかも絶対自分で使ってないだろ!Primary Keyの重複とか絶対通るわけないんだからさあ、明らかにコピペした奴自分で試してないよね。それにさ、NPCの名前やZone名で

INSERT INTO (略) 'hogehoge', 'Nagafen's Lair', 'hogehoge'....

とか通る訳ねえだろ!ふざけるな!!
そういうのをコミットすんじゃねえ!!!!

と、まあ自分も仕事じゃないコードとかだとそんなに厳密にチェックしないしな…

で、そーいやBindを買ってなかった事を思い出してPoK図書館で探してみる。



あったあった。Clericのトコだったよなーと言う記憶は間違っていなかった。

BOTはSummonedの装備を持たせていても消滅しないので、MagはBOT装備が集めやすくて助かる。
早速購入したばかりのSummon Spellで装備品を幾つか召喚して持たせておく。


さて、やはり最初は懐かしのCCB(Clan Crush Bone)制圧かな!
そうだ、ついでにギルドマスター殿にご挨拶してこよう。習ってないスキルとかもあるかも知れないしー



使ってないSpellのSkillを1だけ振って、早々に退出。Elementalを呼び出す触媒のマラカイト買わないと、と思って外のおねーちゃんのトコに来たら…昼間っから何してんすか


そして100個までスタックする事を忘れていて一気に大人買いしてしまった。お金足りたからいいんだけどね…


それにしても、logicoolのG600マウスが快適で捗る。MMOゲーミングマウスを謳ってるだけはあるね。側面12個のボタンにホイール、チルト、追加の薬指クリックによるシフト、モード切り替えボタン等を駆使すれば5~60個のボタン使い分けができるし、マクロ登録すれば複数の操作を1ボタンでやれるし。Razorのマウスは軽すぎて嫌いなので、MSかLogiかの2択だったんだけど、こいつはNagaの後発パクリだけあってより洗練されてて使いやすかった。



↑こいつ。ステマステマ。アフィリエイトも仕込んでおいた。閲覧数ゼロに等しいblogでんな事しても意味ないけど。


Kelethinの音楽やFelwitheの音楽は故郷に帰ってきた感がぱない。


そんな訳で、CCB前到着。



Zone際で忘れずにBindを済ませてから突入。
Trainer→Slaver→Emissary→Thaumaturgist→Warden→Taskmaster→玉座






Ambassador D`Vinn不在。Dragoon Dirkゲットならず。



あっさり皇帝崩御。懐かしのDwarven Ringmail TunicはPaladinへ。









CCB制圧完了。帰りにもっかいTrainer倒したけど空っぽ。Shield欲しかったなぁ。

2013年4月6日土曜日

EverQuestとは


Ever Quest


EQとはどんなゲームだったのか軽く説明

世界観

3Dで世界が描かれたファンタジーMMORPGで、プレイヤーキャラはエルフや人間、ドワーフ等お馴染みの種族やいわゆる悪役とされるオーガ、トロル、ダークエルフ等も選べる。

種族により選べるクラス(職業)は決まっていて、クラスの特徴が極めてハッキリしているのでソロで何でもできる最近のゲームとは全く異なっている。

トールキンのファンタジーに準じた世界観で、鬱蒼とした大森林の樹上の町や海沿いの砂漠地帯、大きく栄えた港町や溶岩と火山エリア、氷河と永久凍土のエリアや落ちたら即死の峡谷エリア、大きな湖で構成されるエリアや常に薄暗い湿地帯、巨人の歩きまわる台地、広大な平原など見た目にも特徴のある土地が多く存在した。







舞台となる世界はNorrathと言う惑星で3つの大きな大陸に分かれており、東西を横断するにはリアル時間で上手く行っても3~4時間はかかる(高Lvlであればもっともっと短かったが、低Lvlなら数日がかりだった)

信仰神としてPlayerが選択できる神々が多数おり、それぞれにバックグラウンドストーリーが緻密に用意されていて世界中のクエストやFaction(後述)に絡み合っており、世界観の深さを増していた。

後述のFactionに基いて、各Playerには敵対する集団が予め決まっている。
(例:善の種族と悪の種族は基本的に敵対)


Zone

広大なEQの世界、惑星Norrathのエリアは1エリアに収めるにはサーバー的な負荷がキツ過ぎるのでエリア毎に分けられていた。この1エリアをZone(ゾーン)と呼び、Zoneを移動するにはそれぞれのZoneを繋ぐ通路を通る(見えない壁があり、そこを超える)とZoning(移動の為のロード処理)が行われて、ロードが終了すると隣のZoneへ出現する。
各Zoneは独立しており、隣のZoneから影響を及ぼす事はできないし、隣の様子も見えない。ここを通り抜けられるのはPlayerのみなので、しばしば敵から逃れる為のZoningが行われた。

Faction(派閥)

ファクション(以後Fac)と呼ばれる評判度があり、各Playerは自分の所属するFacの評判を気にしながらプレイする必要があった。
Facが上がる分には問題無いのだが、Facが一定値を下回ると以下の様な弊害がある為である。

  • そのFacに所属するNPCベンダー(売買ができるNPC)が取引を拒否する
  • そのFacに所属するNPCが口をきいてくれなくなり、クエストが進行できなくなる(罵声を浴びせられる)
  • そのFacに所属するNPCやGuard(守衛)が襲い掛かってくる

殆どのFacは敵対関係を持っており、誰かにいい顔をすると敵対Facが下がると言う仕様。
そして人間型のMobは殆どがFacを持っており、敵を倒すにも注意が必要だった。
前述したPlayer種族は善・中立・悪のざっくりした分け方をしたが、厳密には

  • 種族
  • 職業
  • 信仰神

によってFacが異なり、それでNPCの評判も左右されるのでPlayerには緻密なFac管理(及びその知識)が求められた。
この為、善と悪のPlayerが混在したパーティでは倒す対象をよくよく考えてから戦闘しなければならない。例を挙げるとこうだ。


6人パーティを組んで移動中、一人のオーガ戦士が人間のGuardに襲われた。残り5人は善の種族なので、手出しすると自らのFacを下げる事になるため、見殺しにするしか無かった(回復魔法等の補助を行なってもFacは下がる)


戦闘

EQはプレイのほぼ全てが戦闘に集約されている。
いわゆるHack 'n Slash....冒険をし、敵を倒し、アイテムを得、lvlを上げて強くなり、より強い敵を求めて彷徨う。そういったゲームデザインがされていた。
戦闘にも色々と特殊な要素があり、これがEQを独特のものとしていた。

Mob

EQの敵は群れており、戦闘状態に入ると条件を満たした敵は連携して襲い掛かってくるためMob(群衆)と呼ばれる。後述のTrainや、Addなどが戦闘を魅力的なものにしていた

Add

戦闘中に他のMobが後から参戦してくる事。
EQのMobはかなり強いので基本的にはパーティvs1Mobを維持するように戦うのが常識となっていた。しかしMobには固定された位置から動かないタイプとうろつき回るRoamerとがいて、戦闘中にRoamerが近づいて来てAddし、あっさり壊滅する事もある。

Train

上述したAddがあった場合や、明らかに勝てそうに無い場合にPlayerがZoningする事で生き延びようとする際、その後ろをMobが連なって追いかける様子が電車ごっこの様に見えるのでそう呼ばれた。
実際には逃げている最中もMobから殴打されている為、大抵は逃げきれずに途中で死ぬのだが…

ダンジョンは殆どの場合1Zoneで構成されており、フィールドのZoneから入り口を経由して侵入する。
大抵のダンジョンは入り口付近が弱いMobで、奥に行くほど強力になっていく為初心者は入り口=Zone境界で腕試しをしつつLvlを上げて少しずつ攻略していくのが常だった。
しかし時折奥の強力なMobを多数引き連れたTrainがZoneを目指して暴走してくるので、初心者達は軒並み轢殺されて稼ぐどころじゃない、なんて光景もザラだった。

Trainは周囲のMobもまとめてAddさせやすい(逃げる時にAddするかどうかを悠長に考慮しながら逃げ道を選べない)ので、奥地始発のTrainはMega Train、Huge Trainになりやすい。これは殆どの道中のPlayerを瞬殺するのでTrainを走らせたPlayerはZone中に響く「Shout」と言うコマンドを使ってZoneにTrain警報を流す事が必須だった。

Aban SHOUTS : TRAIN !!!  TRAIN TO ZONE!!!! RUN FOR YOUR LIFE!!

この為、ダンジョンのZone境界で立ち止まっている事は死を意味する。
ダンジョン入り口手前のZoneに瀕死のPlayerが多数休息している際には、中でTrainが暴走していた(している)と予測ができる。

パーティプレイ

クラスは主に以下に分類できる

  • Tank:防御力、回避力、体力が高くMobの攻撃を受け止め、敵の狙いを引き受ける役目
  • Attacker:攻撃力が高く、Mobの体力を減らす役目
  • Healer:回復能力を持ち、Tankを生きながらえさせる役目
  • (後半から)CloudController:複数のMobを無力化し、パーティvs1の状況を常に作り出す役目
TankだけではMobを殺しきれず、Attackerだけではすぐ死んでしまい、HealerだけではMobを殺せない
結果的にバランスの良いパーティを組む事が必須となり、プレイに大きな制約があった。
しかし、Player特にアメリカ人?は脳筋が多いらしく、何も考えず攻撃するのが大好きだったようでAttackerは有り余っていたがHealer不足が常だった。Tankこそ脳筋に見えるが、実は細かい配慮と作業が必要で、自身の攻撃力は微々たる物なので好まれなかったようだ。


死亡とペナルティ

Playerは死亡すると、それぞれ個別に設定された(設定できる)Bind Point、Home Pointと言う場所に裸で転送される。
この際XPの10%が失われ、装備品も全て死体に残るためPlayerは必死になって死んだ箇所に戻り、死体回収をする必要があった。

もし高Lvlの蘇生魔法を使えるPlayerに依頼できれば、自分の死体に対して蘇生をしてもらう事により失われたXPの最大90%を取り戻す事が可能だった(つまり、実質失うXPは1%に軽減される)

EQのXPは稼ぐ事が非常に困難で、失う時は一瞬なので高Lvlになればなる程死亡時の蘇生魔法は必須になっていった。死体はアイテムを全て回収し終えると消滅してしまうので、常に1個失くしても困らないアイテムをインベントリに置いておいて、死亡時にそれだけを残して他を回収し、蘇生魔法を貰えるまでそのままにしておくと言うのも常套手段として使われた。(ただし、一週間が経つと自然消滅してしまう)

前述のHealer不足でも問題だったが、蘇生魔法の使い手はイコールHealerでもあるのでHealerは常に引っ張りだこだった。その上Play中に突然知らない人からTell(Whisper、個人向けのチャット)が飛んできて「どこどこ(10Zoneも離れたエリア)で死んだから蘇生してくれないか」とかが頻繁に飛んでくるので、相当うんざりすると言う話はHealer経験者なら誰しも身に覚えがある事、という状態だった。




アイテム、Camp

EQの魅力の一つ、アイテム(装備品)
数えきれない程のMagic Itemが世界中に存在し、その中には超レアなDrop Rate(入手確率)が設定されている物もあり、Playerはアイテムを求めて世界中を飛び回っていた。

特にNamedと呼ばれる固定位置でPop(Mobが”湧く”事をPopと呼んでいた。Spawnとも呼ぶ)する特殊な名前付きのMobは、大抵の場合何かしら固有のアイテムを落とす為Player達はNamedを殺しては再度Popを待ち、Popしては殺し…を繰り返す”Camp”スタイルを定着させていった。



Raid(レイド)

当初の世界には存在しなかったが、途中から追加された超強力なボスモンスターをRaid Mobと呼ぶ。
最初期に追加されたのは灼熱のドラゴン、Lord Nagafen。これは当時Lvl制限の50lvl Playerでフルパーティ揃えても勝てない強さで、これを討伐する為に考案されたのがフルパーティを更に複数束ねて大きなパーティとする、Raidと言う概念だった。

当時のRaidはシステム的にサポートされていた訳では無いので、あくまでもPlayer達の共通概念として存在し、団体のリーダーとなるRaid Leaderやサポートする人員がゲーム外で人の配置やら時間の調整やらを行い、討伐に望むと言う非常に大掛かりでどこかお祭り騒ぎの様相を呈する、EQならではの楽しみとなっていった。

その後も氷結の雌ドラゴン、Lady Voxが追加されたり、拡張パック以降はこのRaid志向が強まっていって最終的には神々と戦うまでになっていった(この頃がEQの最盛期であり、その後はWoWにユーザーを奪われて徐々に衰退していったが、今もなお拡張は続けられている。神々を超えたPlayerキャラ達は異世界の敵や異次元の敵、時空を超えた敵など更にインフレしたMobと今も戦いを続けているだろう)