Eve Online クローンについて

スキルクローンとジャンプクローンについて自分なりに整理したことを書きます。

まず、基本的なルールは1キャラクターの意識は常に1つしか存在しないということです。

そしてその意識は必ず1つの体に宿っています。カプセラは体が死んでも意識が必ず別の体に移るだけで、意識が消滅することはありません。

Eveの世界では、この体の予備をいくつか持つことができます。使われ方によってスキルクローンとジャンプクローンに分かれます。

カプセルが割られたとき、つまり現在の体が死んだ(破壊された)ときに、意識が自動的に転送される体のことをスキルクローンと呼びます。この意識の転送時、スキルクローンという名前の通り、この体に移し替えられるスキルの情報量に上限があり、この上限を超えたすでにトレーニング済みのスキル知識は失われます。どのスキルの知識が失われるかはランダムです。

ジャンプクローンは、名前の通り、プレイヤーが作成しておいて、好きなときに意識をジャンプすることができる体です。別の体にジャンプしても現在のスキル知識はすべて受け継がれます。また、覚えることができるスキルの量にも制限はありません。

以下はわたしが最初に疑問に思ったことを答えとともに列挙します。

・意識が現時点で宿っている体はすべてジャンプクローンであると言える。
・スキルクローンは意識が移った時点以降、ジャンプクローンとして機能する。
・インプラントは個々の体(ジャンプクローン)につけるものなので、その体が失われれば、そのインプラントも消滅する。
・1つのステーションに保存しておけるジャンプクローンは1つだけ。(2つ保存するような事態になるとどちらか1つが失われる)
・プレイヤーの操作による意識の転送(ジャンプ)は24時間に1度しかできない。
・スキルが失われる可能性があるのは現在の体が死亡してスキルクローンに意識が転送されるときだけ。
・”スキル”が関係してくるのはスキルクローンだけ。

詳しいことはwikiを参照のこと。
ジャンプクローンスキルクローン




ISLispインタープリタをC言語とISLispで書く、その後

自分用の書きなぐりではありましたが、読んでくださる方がいたので翌日朝(2012年8月22日)若干修正。

以前、失敗したにもかかわらず、自分(俺様)仕様LispのインタープリタをCで書いていました。しかし、結局ISLispからObject Orientedな部分とGeneric funcitonを除いたものに毛が生えた程度になってしまいあまりにも簡単すぎたので、それならとISLisp準拠を目指そうと書き直しています。

目的は、まず、自分にもISLisp処理系が書けた!ワーイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイという感情を味わうこと。基本方針はKISS(Keep It Simple and Stupid)決してKeep It Short and Simpleとは言いません。バカなほど愚直な実装しか自分には書けないだろうと見積もったわけです。

デザイン指針は、まずC言語で小さなISLispの機能縮小版インタープリタを書きます。そこからISLispで書いた本格的なISLisp処理系を立ち上げ時にロードするというものです。”ISLispで書いた”と言いましたが実際は機能縮小版で実装されている部分と徐々にロードされていくISLispで書いた機能を使ってしか書けないわけです。だがいかにも自由にISLispでISLispを実装しているかのように書くのがミソというわけです。

そして実行速度は無視。インタープリタとしての機能を実現するコードの簡潔さと読みやすさを重視します。fixnumとポインタでビットを立てて区別とかのテクニックは使いません。bignumも最初はなしで必要になったらGNU MP libraryを使います 。ガベージコレクタは最初はつけずに開発します。いずれ必要になればBoehm-Demers-Weiser garbage collectorを使用することにします。

現在のCで書いた縮小機能版は、バッククオートなどもサポートしたread関数、適当に書いたformat-object関数、eval関数などです。つまりrepループは動いています。
ストリームもC言語ライブラリのストリームへの薄いラッパーとして実装しました(stream-ready-pが実装できない危険性あり)。コントロール系スペシャルオペレータのif、Non local exitのunwind-protect、catch、 throw、 tagbody、 go、 block、 return-fromなどもCで記述しました。簡単なerror関数。あとISLispで書いたファイルをロードしてISLisp処理系として立ち上げるためのload関数など。

ISLispで書いたファイルはbuilt_in_classes.lisp、class.lisp、cons.lisp、control.lisp、error.lisp、
format_object.lisp、generic_function.lisp。

class.lispはdefclassを定義しています。このdefclassはメタクラス指定が<built-in-class>のクラス定義だけ動くようになっています。まだメタクラスが<standard-class>のものは受け付けません。

built_in_classes.lispは<built-in-class>をメタクラスにもつ<cons>, <vector>などのクラスの継承関係をdefclass文を使って記述しています。

generic_function.lispは現在書きかけです。Generic Functionは以前、Cで実装したことがあるので実装する自信はありますがなぜかここでやる気が途切れて放置しています。

generic functionは<standard-class>のクラスが定義できないdefclassのままでもテストできるので、次の実装目標となりました。(<sequece>, <string>, <cons>などのビルトインクラスのオブジェクトをテストには使います。)

Standard Class、Generic FunctionとCondition Systemが書けたらもうあとは考える必要がないような部分になります。果たしてこの山を越えられるのかまた挫折するのか。Condition Systemは一回、Common Lispで書いたことがあるのでできるはずなんですが忘れています。クロージャとダイナミック変数を使って実装したような…。



原始仏教入門

釈迦がどんなことを言っていたのか、よくある仏教解説書などを読むよりやはり原典にあたるのが結局は一番の近道だと思います。

それが、スッタニパータとダンマパダ(法句経[ほっくぎょう])。釈迦が見つけた苦を滅する方法が書いてあります。

ダンマパダは仏教初心者へ向けたもので、スッタニパータはすこし修業が進んだ者向けだと思います。

どちらに書いてあったか忘れましたが、個人的には釈迦がある一定の状況下では自殺も肯定していたととれる記述が興味深かったです。