Sheogorath様の狂気、チーズをふんだんに使ったMOD作成中

2015-01-21_00009▲西の監視塔をチーズで制圧。

狂気のMOD「Cheese Booster(仮称)」を作成中です。
先日Youtubeでシェオゴラス様セリフ集を見ていて、ふとチーズがあれば死んでもいいと思い作成を決意。

■コンセプトは、、、狂気?
フォロワーMOD及びスペル追加MODとして作成しようと考えました。
ストーリーラインはやはり狂気に満ちていないといけない。例えばこんなのはどうか。

ヘルゲン近郊で定命の者「Lokir」の遺体を発見した狂乱のデイドラの王子。とても退屈していた彼はその遺体を蘇生させるため、たまたま所持していた猫の魂をLokirに封入した。
蘇生されたLokirの体を持つ猫、思いの外新たな人生を満喫するのに前向きであり、狂乱の王子は特別なチーズを猫に与えて余生を楽しむよう言った。Lokirの体を持つ猫は、スクーマよりもチーズを狂おしく愛するようになり、その様子を狂乱の王子はしばらく楽しむことにしたのである。

前作の「燃えた犬が降ってくる」ほどの狂気ではないけれど、Questをガチガチに作るわけではないため、道筋としてはこれくらいでよいだろう。LokirのモデルをDuplicateしてもみあげを追加。声はカジートである。ちなみにLokirはEditorIDで探すと「MQ101Prisoner」という名前になっているので探すときはNameでソートするとよいです。

■魔法はどうする?
次の条件を満たしたい。

1)かなり強力なバランスブレイク魔法にしたい。
2)アイテム消費型魔法
3)ネタ要素満載

ストーリーラインにあった「特別なチーズ」を所持すると魔法を追加するようにし、チーズがなくなると魔法を忘れるようにスクリプトを組みたい。
Questを作ってOnUpdateでQuestScriptにすればいいかな。
猫Lokirとプレイヤーをエイリアスに設定してそこにスクリプトをつけてチーズ消費の監視をさせる。
チーズをProjectileにする魔法です、身内にSSを見せたら「なんだこれは」と良い反応をもらったので完成が楽しみ。

■公開は近日中
今日中にできるかもしれないけれど、もうすぐです。その後他のMODの不具合修正にとりかかります。

■とっても悩んだスクリプト
猫Lokirを複製したActorをCellに設置し、次のスクリプトを書いてQuestスクリプトに放り込んだ。このスクリプトは何かというと、チーズ所有を監視し、魔法の追加や削除、使用可否をリアルタイムで制御する役目を担っている。なお、チーズ魔法はPlayerと猫Lokir以外の使用を想定していない。

Scriptname _BoosterCheezeMonitor extends Quest

Event OnInit()
debug.notification(“Sheogorath know.”)
RegisterForSingleUpdate(1)

EndEvent

Event OnUpdate()
;実際の処理はここ

CheezeCount = Game.GetPlayer().GetItemCount(Items1)

; Debug.notification(“Monitaring now”)

;playerのスペル処理
if Game.GetPlayer().GetItemCount(Items1) <= 0 && Game.GetPlayer().HasSpell(ChoiceSpells1) == 1 ;チーズを持っておらず、スペルを所持している場合は呪文を外す

; debug.notification(“Cheeze.” + Items1)

PlayerSetting.RemoveSpell(ChoiceSpells1)
PlayerSetting.RemoveSpell(ChoiceSpells2)
PlayerSetting.RemoveSpell(ChoiceSpells4)
debug.notification(“You lost Sheogorath Power Spells.[Q]”)

elseif Game.GetPlayer().GetItemCount(Items1) > 0 && !(Game.GetPlayer().HasSpell(ChoiceSpells1)) ;チーズを持っていてスペルを所持していない場合は呪文を加える

if !(Game.GetPlayer().HasSpell(ChoiceSpells1))
playerSetting.AddSpell(ChoiceSpells1, 1)
playerSetting.AddSpell(ChoiceSpells2, 1)

if !playerSetting.IsIninterior()
playerSetting.AddSpell(ChoiceSpells4, 1) ;屋外なら呪文を加える
debug.notification(“okugai”)

endif

debug.notification(“You get Sheogorath Power Spells.”)
endif

if playerSetting.IsIninterior() && Game.GetPlayer().HasSpell(ChoiceSpells4) ;屋内でチーズプレッシャースペルを持っている場合は外す

PlayerSetting.RemoveSpell(ChoiceSpells4)
; debug.notification(“okunai + cheese”)

endif

if !playerSetting.IsIninterior() && Game.GetPlayer().GetItemCount(Items1) > 0 && Game.GetPlayer().HasSpell(ChoiceSpells4) ;屋外でチーズを持っていて、チーズプレッシャースペルを持っていない場合は加える

PlayerSetting.addSpell(ChoiceSpells4)
; debug.notification(“okugaii + spell”)

endif

endif

if Game.GetPlayer().GetItemCount(Items1) > 0 && playerSetting.IsIninterior() && Game.GetPlayer().HasSpell(ChoiceSpells4) ;チーズを持っていてチーズプレッシャースペルを所持しながら屋内に来た場合スペルを外す。

PlayerSetting.RemoveSpell(ChoiceSpells4)

elseif Game.GetPlayer().GetItemCount(Items1) > 0 && !playerSetting.IsIninterior() && !Game.GetPlayer().HasSpell(ChoiceSpells4) ;チーズを持っていてチーズプレッシャースペルを所持せず屋外に来た場合スペルを加える。

PlayerSetting.addSpell(ChoiceSpells4)

endif
;フォロワー側スペル処理

CheezeCount = PlayerLokir.GetItemCount(Items1)

if !PlayerLokir.IsDead() ;ロキールが死んでいないかチェック。

if PlayerLokir.GetItemCount(Items1) <= 0 && !PlayerLokir.HasSpell(MagickaDownAb);チーズ不足で、チーズスペルを使えなくする処理

;debug.notification(“Cheeze.” + Items1)

; PlayerLokir.RemoveSpell(ChoiceSpells1)
; PlayerLokir.RemoveSpell(ChoiceSpells2)
PlayerLokir.addspell(MagickaDownAb)
debug.notification(“Lokir lost Sheogorath Power Spells.(Q)”+ PlayerLokir + “/” + cheezecount)

elseif PlayerLokir.GetItemCount(Items1) > 0 && PlayerLokir.HasSpell(MagickaDownAb) ;チーズがあるのでチーズスペルを使えるようにする処理

; PlayerLokir.AddSpell(ChoiceSpells1, 1)
; PlayerLokir.AddSpell(ChoiceSpells2, 1)
PlayerLokir.removespell(MagickaDownAb);
debug.notification(“Lokir get Sheogorath Power Spells.”)

endif
endif

RegisterForSingleUpdate(2) ;2秒後OnUpdate開始。

EndEvent

Potion Property Items1 Auto

Spell Property ChoiceSpells1 Auto
Spell Property ChoiceSpells2 Auto
SPELL Property ChoiceSpells4 Auto

Spell property MagickaDownAb Auto

int CheezeCount

Actor property PlayerSetting Auto ;プレイヤー用
Actor property PlayerLokir auto ;ロキール用

「チーズプレッシャー」というスペルだけは屋外専用なので、個別判定を設けています。
また、CKの仕様で「Actorに初期設定したスペルのRemoveSpellができない」らしい。そのため、猫Lokirに関しては所持チーズがなくなった場合はMagicka総量と回復レートをマイナス値にするアビリティを付与し、魔法を使えない状態を表現した。

さて、ここで問題が発生。「Actor property PlayerLokir auto ;ロキール用」と宣言してCellに設置した猫Lokirをプロパティ値にぶち込んであるはずが、ゲーム内では「NONE」を返してしまい、処理が出来ない。
プロパティを設定しなおしても、変数を作りなおしても、新規ゲームをしてもダメ。いろいろ調べてみてもそんな現象を報告している日本語サイト、英語サイトは探した感じ見当たらない。
猫LokirのRefIDはプロパティ値とGame内では同じなので、いいはずなのだが・・・。

MODお蔵入り!?

そう思っていたんですが、3日悩んだ結果、何とかなりました。Cellに設置した猫LokirのリファレンスにあるEditorIDに任意の値をつけることで、めでたくスクリプトが稼働しました。
こんな単純だったとは・・・。

refdiag
▲一番上のフィールドに値を入れてズバっと快傑。

テストや細かいオブジェクトを配置して、やっと公開出来そうですね。

■この記事
読み返したらすんげー読みづらい。でも修正はめんどいのでしない。・・・おいらもシェオ爺の狂気に支配されているかもしれん。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください