今更なオブリビオンブログ
おもにMOD関連のメモを書いていくと思います、MODをいじったり、作ってるのが楽しいです。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Recharge Magic
ついでにもう一つ、以前作った自作MODの「Recharge Magic」です。

http://www.4shared.com/zip/GCueoVjb/RechargeMagic.html


某所で評価を聞きたいと思ってUpしたのにプロバイダーが規制されていて書き込めず、そのままになっていたものです。


■概要
エンチャントアイテムをリチャージできる呪文を追加します。

似たようなものは一杯あるけど、どれもチート気味だと思ったので自分用に造りました。
なので、制限が多いです。

まず、パワーにしてあるので一日一回しか使えません。
使うとしばらくマジカが空っぽになって他の呪文が使えません。
スタミナも持っていかれるので、敵前で使うのは危険です。
回復するのは1200ポイント分だけです。




初めて作った習作なので後から見ると、不出来な感じです。
具体的に言うと、画面上にアイテム取得のメッセージが流れてしまってちょっと気になる感じです。
もしCSを扱えるならこちらのページを参考にちょっと改造して使ってください。
スポンサーサイト

テーマ:PCゲー - ジャンル:ゲーム

Level Down MOD
今まで作成までをつらつらと書き綴ってきた、
自作MODの「Level Down MOD」完成です。

ダウンロードはこちら
http://www.4shared.com/zip/af-MOceZ/LevelDownMOD_v101.html

■概要

「Level Down Spell」と「Level Up Spell」という魔法(レッサーパワー)を覚えます。

Level Down Spellを使うと、レベルが1つ下げられます。その際に最大Healthが9ポイント下がり、
任意で3つの能力を3ポイントづつさげる必要があります。
レベルを1つ下げると「Level Up Stone」というアイテムが1つ手に入ります。

Level Up Spellは、下げた分のレベルを元に戻すための魔法です。
「Level Up Stone」を持っていないと使えません。
使うとレベルが1つ上がり、最大Healthが9ポイント上がり、任意で3つの能力を3ポイントづつ上げられます。
「Level Up Stone」を1つ消費します。



…書いていて、思いついたんですが、レベルが上がらなくなるMODと一緒に入れて、
Level Up Stoneを各ダンジョン等に配置する、というプレイも面白そうです。

あれ?似たようなものがすでにあったような…

続きを読む

テーマ:PCゲー - ジャンル:ゲーム

MOD作り6
魔法の設定を作り終えて、これで完成です!


…と言いたい所ですが、作っただけでは、プレイヤーは魔法を持っていないので使えません。
なので、プレイヤーに魔法を覚えさせる処理を作る必要があります。
まあ、本当は順番的には最初に作ったところですが、今回はこの辺の解説をしておきます。


といっても、ほとんどこちらのBlogの記事からのコピペですが …

まず、「AddLevelDownSpell」という名前のクエストを作ります。
そして、

scn AddLevelDownSpellQs

begin GameMode
 Player.addSpell LevelDownSpell
 Player.addSpell LevelUpSpell
 Stopquest AddLevelDownSpell
end


と、書いたクエストスクリプトをつくったら、先ほど作ったクエストに付けます。
これだけでゲーム開始時にプレイヤーが魔法を覚えてくれるようになります。

この処理の仕方は、MODアイテムを渡すのにも良く使われていて、MOD作りの基本スキルみたいな所があります。



これでようやく本当に完成です。
まあ、実際は何度も失敗を繰り返してますが…
個人的に不等号の向きを間違えて、その間違いに気づかないというのが多かったです。
ふだんの生活では使わない記号だとはいえ、勘違いしても気づかない思い込みって怖いね。



あと配布に当たっては、どんなMODなのかが分かる、ReadMeを作るだけです。
Blogなんて、いつまで続くか分からないし、
もしかしたら、どこか知らない所で再配布されるかもしれない。
そういうときのためにReadMeをちゃんと作っておかないといけません。
ReadMeがあることで助けられた事は自分も身に覚えがありますし、わりと大切な事だと思うのです。

テーマ:PCゲー - ジャンル:ゲーム

MOD作り5
こんどは、レベルをダウンした分、元に戻すための魔法も作りたいと思います。
処理としては、マイナスにしたレベルとステータスをプラスにするだけなので、簡単です。

しかし、ただこれだけだと、際限なくレベルアップが出来てしまうので、
なにか制限を設けないといけません。


というわけで、レベルをダウンする際に何かアイテムを手に入れて、レベルアップの魔法を使う際には
そのアイテムを消費し、無ければ使えないようにする事で実現しようと思います。
アイテムの個数を見れば、いくつレベルを下げているかも分かって一石二鳥です。

テーマ:PCゲー - ジャンル:ゲーム

MOD作り4
魔法を実行する際に、PCのレベルや能力値が低いと実行できないようにしたいと思います。
そうしないと、0を下回った場合、カウントが一回転して最大値になってしまうからです。

下記のように条件を書き加えました。


short bDecision

~~~~~~~~~~~~~~省略1

if pcLevelSaved > 1
 set bDecision to 1
endif
if nHea > 10
 set bDecision to 1
endif
if nStr > 10
 set bDecision to 1
endif
if nInt > 10
 set bDecision to 1
endif
if nWil > 10
 set bDecision to 1
endif
if nAgi > 10
 set bDecision to 1
endif
if nSpd > 10
 set bDecision to 1
endif
if nEnd > 10
 set bDecision to 1
endif
if nPer > 10
 set bDecision to 1
endif
if nLuc > 10
 set bDecision to 1
endif

;======================================
;First run
;最初に条件が合ったら以下を実行する
;======================================
if bDecision == 1

~~~~~~~~~~~~~~省略2

elseif bDecision != 1
 MessageBox "レベルか能力値が低すぎるため実行できません"
endif
end



処理の内容としては、まず「bDecision 」という変数を設定してから、条件をそれぞれ判定してゆき、
合っていたら1を入れる、合わなかったらいれない、そして最後のIf文の「省略2」で
「bDecision 」が1だった場合に実行する、違ったら実行しないでMessageBoxを出す、というものです。



…ですが、うまく、思ったとおりに動いてくれません。




これは、気づくまでかなり悩みました。
プログラミングが本職じゃないのに、これを一目見て違うと分かった人はすごいです。
プログラマー向きです。
自分は気づくまで、丸一日悩みました。


この書き方がなぜダメなのかというと、上のように、If文を並べて書いた場合は、
一つずつ判定していき、途中で一つでも条件が合えばGoサインが出る、
つまり、どれか一つでも条件があっていれば実行される、という意味になるからです。


そのため、今回のような場合は、条件を入れ子にして、一度で判定しないといけなかったんです。
で、下のように書き直しました。


short bDecision

~~~~~~~~~~~~~~省略1

if pcLevelSaved > 1 && nHea > 10 && nStr > 10 && nInt > 10 && nWil > 10 && nAgi > 10 && nSpd > 10 && nEnd > 10 && nPer > 10 && nLuc > 10
 set bDecision to 1
endif

;======================================
;First run
;最初に条件が合ったら以下を実行する
;======================================
if bDecision == 1

~~~~~~~~~~~~~~省略2

elseif bDecision != 1
 MessageBox "レベルか能力値が低すぎるため実行できません"
endif
end



これで、ようやく思ったとおりに動いてくれました。

…でも、これだと「bDecision」という変数を用意した意味がまったく無い…まあ、いいか。

テーマ:PCゲー - ジャンル:ゲーム

MOD作り3
KseAliLevelingの動作としては、
プレイヤーのレベルの変動とオブリビオンゲートを閉じたかどうかを監視していて、
変化があったら、MessageBoxを表示させる、という部分と
実際に能力値をいじるという部分になっているようです。



今回作りたいMODでは、魔法を使ったときに動作させたいので、2箇所あった
「begin GameMode」のうちの一箇所を「begin ScriptEffectStart」にして、
実際に能力値をいじる部分は、ほぼそのまま使わせてもらおうと思います。




…ところが、うまく動作してくれません。
「begin ScriptEffectStart」では、スクリプトが1回しか動作しないため、MessageBoxが一度しか出ないのです。
なのでMessageBoxを出す処理は、「begin GameMode」の能力値をいじる部分の頭に持ってきました。
これでうまく動きました。




…色々いじっていると、また新たな問題が発生。
KseAliLevelingは、1ポイントづつ7回能力を割り振りますが、これを3ポイント3回に変更したいと思ったのです。
なのに、なぜかスクリプトの中に「7」という数字が見当たらないのです。

CSで見ているだけでは埒が明かないと思い、TES4Editでのぞいてみた所、
「Global」の中になにやら「KseAliLevelUpInc」と「KseAliGateCloseInc」が追加されているのを発見。
「KseAliLevelUpInc」の中身は「7」になっている…

もしやと思い、スクリプトの中を「KseAliLevelUpInc」で検索してみると…あった、ありました。
これを「3」に書き換えることで、無事3回に変更する事が出来ました。


続きを読む

テーマ:PCゲー - ジャンル:ゲーム

MOD作り2
KseAliLevelingのスクリプトの中身を解析中です。

このMODは、スクリプトの中で、コメントが残してあったり、変数名が分かりやすい名前でありがたいです。
当然英語ですが。

コメント部分と変数名を機械翻訳すると、だいぶ見えてきました。


とりあえず中を見た所、1つのスクリプト内で、begin GameModeの記述が2箇所ありました。
これは、処理が2つに分けられているようです。
どうやら、上げる能力を選ぶインターフェースの部分と、実際に能力値をいじる部分とに分かれているようです。

テーマ:PCゲー - ジャンル:ゲーム

MOD作り1
長くプレイしていると、レベルが上がりすぎて、それに釣られて敵のレベルも上がって、
低レベル帯の敵に会わなくなってしまいます。

なので、コンソールとか使わずに、簡単にレベルをダウンできるMODを作りたいと思います。

ところで、MODを作るのに、一番近道なのは、実現したいと思う機能に近いMODの中身を見る事です。
なので、今回はこのMODを参考にさせてもらいます。

KseAliLeveling
http://oblivion.nexusmods.com/mods/3932

このMODはレベルアップ時に好きなステータスに値を7つ振り分けられる、というものです。
なので、ステータスのアップをダウンにして、ステータスの振り分けのトリガーをレベルアップ時から、
魔法を使ったときに変更すれば、実現できるかなと思います。


テーマ:PCゲー - ジャンル:ゲーム

本につけられているスクリプト
MODを作るときに参考になりそうなヴァニラのスクリプトをメモしておきます。
以下は、暗殺ギルドの指令書についているスクリプトです。

Scriptname Dark10OrdersScript

short Read

begin OnEquip player

if Read == 0
 ;SetStage Dark09RetirementFin 30
 set Dark09RetirementFIN.orders to 1
 set Read to 1
endif 
 
end


まず一文目はスクリプトの名前になります。

二文目ではReadという名前の変数を宣言してます。

三文目で、このアイテムをプレイヤーが使ったとき(装備したとき)に実行される事が分かります。

次のif関数がありますが、条件の中はReadが0の時で、その中の処理でReadに1を入れているため、このif関数は
一回だけ実行をさせるための物である事が分かります。
で、その実行の中身は
 ;SetStage Dark09RetirementFin 30
 set Dark09RetirementFIN.orders to 1
ですが、「;」がある行はコメント欄で、実行されないため実質下の

 set Dark09RetirementFIN.orders to 1

を一回実行させるためのものになっています。
この一文の意味は、Dark09RetirementFIN.ordersと言う変数に1を入れるというものですが、
Readと違ってどこにも宣言がされていません。

この関数がどこから来たかと言うと、これは実はDark09RetirementFINと言う名前のクエストで宣言されている関数になります。
クエストで宣言して実行してある関数は「クエスト名.変数名」と書くことで使えます。




ちなみにそのクエストのスクリプトは以下の通り

Scriptname Dark09FINScript

short orders

Begin GameMode

if orders == 1
 SetStage Dark09RetirementFin 30
 set orders to 2
endif

End


処理の仕方は指令書についているスクリプトとはぼ同じで、
 SetStage Dark09RetirementFin 30
を一回だけ実行するためのものとなっています。
これは、クエストステージを30に進めるという意味になります。



なぜこんな回りくどい事をしているかというと、おそらく指令書のスクリプトでSetStageをすると、
本を開いた瞬間にクエストのジャーナルが出てしまうからです。

こうやってワンクッション置くことで、本を開いて、それを閉じた瞬間にジャーナルを出すために
こういうことをしているんだと思われます。
CSの仕様
これ、すでに知っている人は居るんでしょうが、
ちょっとCSでMODをさわっていたら、衝撃の仕様が見つかったのでメモしておきます。

ダイアログのスクリプトからアイテムをAddするとき、プレイヤーが使用不可のアイテムはAddできない…そう思っていました。
実際、下記の書き方では渡せませんでした。

AddItem [アイテム名] ,[個数]

でも、ちょっと書き方を変えるだけで渡せました。それは、

AddItem [アイテム名] [個数]

と、するのです。

なんと、「,」がないだけで渡せてしまいます。いや、、「,」があるだけで、渡せないと言うべきでしょうか。
…見やすいように「,」を使っていると不便になるとは、なんとも理不尽な仕様です。
ブログ設置
オブリビオンの続編であるスカイリムが発売になってから一年以上がたちました。

…なのに自分はいまだにオブリビオンをやっています。
面白そうなMODもまだまだ沢山あるし、最近は、MODいじりにもはまっています。

スカイリムへ行くのは、まだ先になりそうです。




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