2013年5月3日金曜日

GLSL Shaderを入れなおしてみた

minecraftをプレイしていて初めてFortuneエンチャントが付いた!
しかもダイヤピッケルに、Fortune III & Efficiency IVが!!


今まで散々出なくてSilk Touchばかり貯まっていったので、ダイヤ鉱石はSilk Touchで掘り出して保存しておいたのがここぞとばかり役に立つ。






って事で、18個のダイヤ鉱石から55個のダイヤを掘り出してホクホク。




で。


minecraftが1.5.2にバージョンアップしてたけど、久々にGLSLシェーダーを入れてみる為にVerUPはお預け。

とりあえず最新のを適当にDLして入れてみたけどどうにも動いていないっぽい。

原因は、OptifineとGLSLのVerを合わせないといけないらしい。


GLSL Shaderは1.5.1対応を行なっているのがオリジナルの人とは別の人っぽくて
1.5.1対応の最新のはofuA8 (OptiFine Ultra A8)に対応してるらしい。

既に入れていたUltra D1を削除してA8を入れる。MinecraftForgeはそのままで動いたのでおk。


で、起動したので早速定番のSEUS(Sonic Ether's Unbelievable Shaders)を入れる。
Zipを該当のフォルダに入れてゲーム内で選択するだけで切り替えられるようになったのね。
時代は進んでいる。便利便利。

と、起動はしたんだけど・・・・クッソ重い。FPS20とかちょっと話にならないし、テクスチャが表示しきれてない。
うーーん、綺麗ではあるんだけど、もう2年前のPCでは流石に辛いか。









綺麗なんだけどねぇ…


ファンが凄い勢いで回ってるよ…





ついでなので256テクスチャに変えたバージョンも。
動物とかも表示しきれてないので、養鶏所が鳴き声はすれど何も居ないホラーな感じに。




元に戻そう……


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やろうぜ!