スポンサーサイト

--.--.-- *--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

開発状況

2009.09.28 *Mon
効果を補正したうどんげスペカをぺたり。

スペカ使用した直後
20090928_1.jpg
↓1ターン後
20090928_2.jpg

それなりに実用的になったかな?

帰りに散髪行ってたら時間がなくなってしまったので、
本日の更新分はちょろっとだけです。

     SK Ex Ph SC Tx   スキル、Ex、Phan,スペカ、テキスト
フラン :○ ● ○ ○ ×
てゐ  :○ × × ○ ×
めらんこ:○ ● ● ○ ×
うどんげ:○ ○ ○ ● ×
にとり :○ ● ○ ○ ×
カナコ :○ ○ ● ○ ×
いくさん:○ ○ ○ ● ×
パルスィ:○ ● ● ● ×
さとり :○ ● ○ ● ×
こいし :× ○ ○ ○ × 不可視化の調整
リグル :○ ○ ● ● ×
ルーミア:○ ● ● ● ×
もこ  :○ ○ ○  ×
けーね :○ ○ ○  ×
きもけね:○ ○ △ ○ ×
ゆうか :○ △ ○  ×
アリス :○ ○ ○ △ ×
パチェ :○ ○ △ ○ ×

赤いところが更新分
○…元から実装済み
●…1.12用に修正済
△…未定
×…修正予定

この表を埋めたら終わりかというと実はそんなこともなく、
他にもCGEからの機能移植やらバグフィックスやら
無双モードの調整やら、やることは結構あったりします。



さて、昨日はSDKの話をしたので今日はPythonの話を少し。
がんばってMOD製作をやってみようかな、という人向け。
興味が無ければ読み飛ばしてしまって問題ありません。


Civ4のMODを作るにあたり、XMLまでは割りと誰にでもできるのですが、
Pythonからは一気に敷居が上がります。
というのも、Pythonの部分に関する情報というのがあまり無く、
もろにプログラムコードなのであまりプログラムをやったことの無い人には
まったく意味がわからないからでしょう。

オブジェクト指向に関する知識とハンガリアン記法、
ついでにPythonかC++、Javaの基本的な言語知識があれば、
大抵の部分はなんとなくわかるのですがそういった人はかなり稀です。

少なくともクラスに関する知識がないと相当つらいと思います。
某帝は直感でSDKいじってるとか伝え聞きましたが、
そういうのはとんでもないセンスと愛が無いと無理な気がします。


とまぁ散々脅していますが、わかってしまえば実のところ難しくありません。
Pythonの言語仕様はC++なんかと比べれば圧倒的にシンプルでスマートですし、
オブジェクト指向はクラスがわかればなんとなくわかってきます。
ハンガリアン記法なんて整数型の変数名には、
名前の最初にiをつけるとかその程度のルールです。

一つ例を出してみましょう、
「戦闘に勝利したユニットには追加で経験値1を与える」
という処理をPythonで加えてみます。

いじるところは、Python\CvEventManager.pyの中の、
def onCombatResult(self, argsList):
という関数の中です。

これは戦闘終了時にCivのプログラムから呼び出される関数で、
呼び出し時には勝利したユニットと敗北したユニットのオブジェクトが渡されます。
pWinnerとpLoserですね。
接頭辞のpはポインタのpですが、C的なポインタを考える必要は無いでしょう。

勝利したユニットに経験値を与えるので、pWinnerに対して操作を行います。
Civ本家wikiのMOD作成情報のところにクラスリファレンス(API一覧)があるので、
その中のCyUnitクラスに関するリファレンスを見てみます。
ここの一番下の方にリンクがあります)

void changeExperience (int iChange, int iMax, bool bFromCombat, bool bInBorders, bool bUpdateGlobal)
その中にこのような関数があります。名前からして経験値を変化させる関数ですね。
引数に関しても、名前を見ればなんとなく意味がわかってきますね。
ちなみに、接頭辞のbはbool型、つまりTrueかFalseが入ります。

iChange:経験値の変化量っぽいですね
iMax:経験値の上限です。-1にすると上限なしになります
bFromCombat:戦闘によって得た経験値かどうか
bInBorders:国境内かどうか。おそらくは万里での大将軍ポイントとかに
        影響するのでしょう
bUpdateGlobal:実はよくわかっていないのですが、他のMODだとFalseに
         なってたりするので、とりあえずFalseにしておきます。

ということで、
pWinner.changeExperience(1,-1,False,False,False)
という一文を追加してやれば改造完了です。


これを自分で一から調べるとなるとかなり手間なのですが、
実際のところ他のMODからそれっぽいところを持ってくるだけでも
なんとかなってしまったりします。

今回はユニットなのでCyUnitクラスを見ていましたが、
これがプレイヤーならばCyPlayer、スクウェアならCyPlotです。
この辺は慣れてくれば直感でも大体わかるところかなぁと。
Javaのクラスリファレンスを使ったことがあれば多分すぐわかります。

大分はしょった説明をしているのですが、誰かの参考になれば幸い。

スポンサーサイト
COMMENT (0)  TRACKBACK (0) 

COMMENT

Comment Form


秘密にする
 

TRACKBACK

TrackBack List


Copyright © フリップフロップ All Rights Reserved.
テンプレート配布者:サリイ (素材:ふるるか) ・・・ 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。