OBLIVION MOD作成支援/相談スレPart6

このエントリーをはてなブックマークに追加
952946:2010/10/27(水) 22:03:26 ID:Wl5VmTyW
よし!obse019正式版リリース!
953名無しさんの野望:2010/10/27(水) 22:05:30 ID:Wl5VmTyW
やべ、なんか名前に入ってた
954名無しさんの野望:2010/10/27(水) 22:12:28 ID:D1LARV0L
>>952
おお、ほんとだw
連絡ありがとう!
955名無しさんの野望:2010/10/27(水) 22:28:45 ID:aRy8cDpn
>>952
でloaderは
ttp://obse.silverlock.org/download/obse_loader.zip
でいいの?
日付が10/8だけど
956名無しさんの野望:2010/10/27(水) 22:38:57 ID:D1LARV0L
>>955
まだ試してないけど、バイナリ書き換えが必要かも。

このあたりを参考に・・・
http://wiki.oblivion.z49.org/?%E9%96%8B%E7%99%BA%E8%B3%87%E6%96%99/%E3%81%B2%E3%81%A8%E3%82%8A%E3%81%A7%E5%87%BA%E6%9D%A5%E3%82%8B%E3%82%82%E3%82%93
ほかにも参考になるサイトあったきがする。
957名無しさんの野望:2010/10/27(水) 22:47:56 ID:Wl5VmTyW
>>955
?URL違うんじゃない?
OBSE 0019 download - current stable version
http://obse.silverlock.org/download/obse_0019.zip
958名無しさんの野望:2010/10/27(水) 22:49:26 ID:D1LARV0L
>>955
書き換えなくてもいいかも。
とりあえず書き換えなしでもCSは起動したよ。
959名無しさんの野望:2010/10/28(木) 02:08:46 ID:/7Jzi4zB
乗馬時のプレイヤーのポーズを変更したいのですが、設定の場所がよくわかりません。

CSの ゲーム効果 > 待機アニメーションの
Character\_Male\IdleAnims > SittingAndSleeping > Sitting > RiderIdles

でkfファイルを指定して、Whole Body、Must return a file、GetSitting == 13(乗馬時のみという条件)と指定したところ、
通常の乗馬ポーズを数表した後に、指定したポーズとなります。
また馬を降りる時も、なぜか指定したポーズのまま降り、非常に不気味です…。

そもそも通常の乗馬ポーズを置き換えられればそれが一番なのですが、
このポーズをどこの設定で変えればいいのか、またはそのkfファイルはどこにあるのかがわかりません…。

どなたか、ヒントを頂けないでしょうか?? よろしくお願いいたします。
960959:2010/10/28(木) 02:10:07 ID:/7Jzi4zB
数表した後→数秒した後
です。すみません。
961名無しさんの野望:2010/10/28(木) 09:16:49 ID:0pz0tqMS
Whole Bodyにする必要があるポーズをさせようとしているの?
乗馬ポーズのAnimation Group SectionはたしかLowerBodyだったと思うけど。
962961:2010/10/28(木) 09:38:30 ID:0pz0tqMS
961は959宛てです。

ごめん、質問最後までちゃんと読んでなかった・・・
乗馬のポーズはたしかMeshes\Creatures\Horse\IdleAnimsにあったかと。馬は一応敵扱いなので。
なのでsitteingの方は触らないでいいと思います。
963961:2010/10/28(木) 09:42:03 ID:0pz0tqMS
ごめん、慣れない環境だったんで文章途中で書き込んじゃった('A`)

ポーズの設定も待機アニメーションのCreatures\Horse\IdleAnimsにありますよ。
964名無しさんの野望:2010/10/28(木) 12:03:39 ID:KESvb/qJ
長文かつ、初歩的な質問で申し訳ありません。
あるMODを作成中に、敵、コンパニオン、PCすべてのNPCを、とある条件で二種類のアイテムのどちらか
を取得させて二通りに分類する、というスクリプトを書く必要ができ、他の方のMODを参考にさせていただいて
以下のようなスクリプトを書いたのですが、ゲーム内にまったく反映されません……。
何か根本的に考え違いをしているのでしょうか……。よろしければ知恵をお貸しください。
〜〜〜〜〜〜〜〜〜〜〜
begin GameMode
set iCnt to refActor.GetItemCount NPCcheckA
if (iCnt == 0)
set iCnt to 1
set iCnt2 to refActor.GetItemCount NPCcheckB
if (iCnt2 == 0)
set iCnt2 to 1
set iRespo to refActor.GetActorValue Responsibility
set iPerso to refActor.GetActorValue Personality
set iValue to 60 - (15 * (iRespo + iPerso) / 80)
if (GetRandomPercent < iValue)
refActor.AddItemNS NPCcheckB 1
else (GetRandomPercent > iValue)
refActor.AddItemNS NPCcheckA 1
endif endif endif end
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
以上が全文です。このスクリプトのタイプをクエストに設定し、適当なクエストを作ってそのクエストのスクリプトに設定。

以上が行った作業のすべてです。
NPCのインベントリにNPCcheckBあるいはNPCcheckA(playable設定はしてあります)というアイテムがランダムに入っているのを期待していたのですが、
まったくそんな様子はなく……。何か足りない作業とかあるのでしょうか……。
どうか、よろしくお願いします
965959:2010/10/28(木) 12:58:22 ID:/7Jzi4zB
>>961さん
Creatures\Horse\IdleAnims 内のkfファイル指定を変更したり、
新しく条件(100%それになるという条件)を作ってから指定したりしましたが、
Creatures\Horse\IdleAnims 内ではどうやってもプレイヤーの乗馬ポーズが変わってくれませんでした…。

どれが乗馬時のポーズでしょうか…?? 見つけられませんでしたorz

>LowerBodyだったと思うけど
はい、確実に変更したかったのでWhole Bodyに変更しました。
でも意味なかったかもしれません…。
966名無しさんの野望:2010/10/28(木) 16:30:06 ID:vAxvi3yt
>>964
うーん、スクリプトの全文には見えないけど、エスパー回答してみる(笑) というか、さらっと見て気がついたおかしな点の突っ込みだけ(^^;

次の2行は意味がないと思うのでいらないと思う。何がしたかったのかよくわからない。
「set iCnt to 1」「set iCnt2 to 1」

使ったことないからわからないけど、GetRandomPercentって「呼ぶたびに、新しいランダムな値を返す」ものだと思う。
なので、適当な変数を宣言して、setしてからその変数で比較してあげないとだね。
あと、elseで条件を書きたい場合は、ElseIfにしないと。

って、まだあるなw
GetRandomPercentが2度同じ数値を返したとして、かつ、ElseIfで条件を書いてあったとしても、iValueがランダム値と等しい場合は、処理されないゾ(笑)
というか、意図してる動きはそうじゃないのかな・・・。どうしたいのかよくわからんw

なので、たぶんここは、
if (GetRandomPercent < iValue)
  refActor.AddItemNS NPCcheckB 1
else (GetRandomPercent > iValue)
  refActor.AddItemNS NPCcheckA 1
endif
こうしたいんじゃないのかな?もしくはelseの行を「elseif (rnd >= iValue)」するか、かな。
set rnd to GetRandomPercent
if (rnd < iValue)
  refActor.AddItemNS NPCcheckB 1
else
  refActor.AddItemNS NPCcheckA 1
endif
967名無しさんの野望:2010/10/28(木) 17:52:25 ID:KESvb/qJ
>>966
返答ありがとうございます!
お察しの通り、嘘ついてました、すいません;;
書き込む時に改行が多すぎてダメ、といわれてしまいまして、スクリプトの題名と変数宣言を省略してしまってました;


このスクリプトでやりたいことは単純で、PCを含むすべてのNPCに対して、randompercentの値がiValueの値より小さければNPCcheckBのアイテムを一つだけ、
大きければNPCcheckAのアイテムを一つだけインベントリに追加させたい、これだけなんです……。

これだけの事なのに上手くいかないとは……CSのスクリプトの壁の高さを痛感しています……。

>「set iCnt to 1」「set iCnt2 to 1」
これは、この記述がないとスクリプトが動くたびにアイテムがどんどんプラスされていってしまうかな、と思ったので追加していました。
これを記述しておけば、そのNPCがNPCcheckAとNPCcheckBを一つも持ってない時のみこのスクリプトが働くようになるかな、と思いまして……。

教えていただいたように、「iCnt」の関連部分を削除して変数「rnd」を使用した文に書き換えて動かしてみたのですが、結果はかわらず……。
一応数分NPCの周りをうろうろしてみたのですが、一人もこれらのアイテムを取得したNPCは現れませんでした……。
そもそもスクリプトがゲーム内で走っていないのかなぁ……
968名無しさんの野望:2010/10/28(木) 18:02:38 ID:EXe2lHVJ
>>967
横からですけど。

二行目の「refActor」て変数、中に何が入ってるんですかね。
そこに入れる値をどうやって持ってくるかが恐らく一番重要なキモ部分な気が。
それってどうなってるんでしょう。

>これだけの事なのに

結構大掛りな事をやろうとしてますよ。
場合によってはそのやろうとしている事自体がその目的に適切かを含めて再検討した
方が早いかもです。
969名無しさんの野望:2010/10/28(木) 18:18:04 ID:KESvb/qJ
>>968
CS(特にスクリプト関連)に対しての理解が浅すぎて、やろうとしてることの規模も理解できてなかったようです……
実は、「refActor」は参考にさせていただいたMODからそのままコピーしてました。
言われてみて初めて気づいたのですが、NPC全部、といった宣言を何もしていませんでした……。
勝手にこの変数がその役割を持っているものだと思い込んでたようです。

この「refActor」の宣言はその参考にさせていただいたMODではref refActorとなっていたので、そのまま書いてみたのですが、
実際、short と ref の宣言の違いすらも良くわかってなかったりします。
基本がまったくできていないのに、難しいものに手を出しすぎているのかもしれないですね……。

スクリプトに関しての勉強はしたいと思っているのですが、どこで学べばいいのかすらわからない状況でして、
現状では何もかも手探りで進んでいるといった状態です。
TES4_CS_Help_v1.1.chmは読んでいるのですが、これだけでは理解できない部分が多くて……。
皆さんはいったいどこで勉強されたのでしょうか。
よかったら教えていただけませんか?
970名無しさんの野望:2010/10/28(木) 18:45:34 ID:EXe2lHVJ
>>969
とりあえず本家CSWikiのMainPage→Scriptingを見てその通りやってみるのがいいん
じゃないですかね。
英語ですけど。でもその分を差し引いても本家CSWikiが一番早い気が。多分。
また本家Wikiの話なら、ここの記述の意味が分からない(英語が読めないとかでなく)
みたいな話もここでOKだと思います。
971名無しさんの野望:2010/10/28(木) 18:46:36 ID:vAxvi3yt
>>967
えーと、とりあえず落ち着こう(笑)

私の指摘の前半しか見てないように感じたけど、後半に指摘した点もちゃんと理解できてるかな?
あと、GetItemCountの戻り値が一緒なら、どんどんプラスされるようなことはないよ。
「set A to B」は、BをAに代入してるだけだよん。
つまりBが変化しなきゃ、何度処理してもAが変化することはない。

あと、>>968さんの言うとおり。処理の仕方とか構成とか、見直したほうがいいと思う。
ぱっとみて、構文間違いが見つかるぐらいなので、ほかにも意図しない動きをしてるところがあるんじゃないだろうか。

一度整理のつもりで、新しいesp作って、「やりたいことだけ動くもの」を、最小限の構成で作ってみたらどうだろう。
そういう小物の積み重ねが、後々すごい勉強になってることに気がつくよ。
ちゃんと理解せずに、他のスクリプトぱくってくると、意図しない動きになったときに、自力で解決できないゾ。

と、えらそうなこと言ってるけど、>>967さんがやろうとしてることを、私はまだ作れない(笑)
私もまだまだだー
972名無しさんの野望:2010/10/28(木) 18:55:01 ID:EXe2lHVJ
>>965
これも横からですけど。

バニラの乗馬時のポーズ(Idle)のkfはまんまcreature\horse\idle.kfです。
馬のアニメって人馬一体でヒトのアニメも同じkf内に含んでいます。

で、その前に「乗馬時のプレイヤーのポーズを変更」の意味が少し謎な気が。

ポーズMODみたいにkfをSpecialIdleとして指定して乗馬時に外部からPickIdleして
そのアニメを再生するのならヒトでも馬でもどちらでも普通に可能です。

そうではなくて、座る/寝るのIdleみたいに任意のkfをIdle時にシステムが自動的に
再生する様な指定は出来ないか、という事だとすると、出来るかどうかは謎ですし、
それを確認する指定方法の話も少しややこしくなると思います。

どっちの話です?
多分後者だと思うのですが。細かな話の前にまずその辺をはっきりした方が。
973名無しさんの野望:2010/10/28(木) 19:09:08 ID:vAxvi3yt
>>969
なるほど・・・それは動かないわ(笑)
納得w

>TES4_CS_Help_v1.1.chmは読んでいるのですが、これだけでは理解できない部分が多くて……。
これ、すごい気持ちがわかる。日本語で学べるところが少ないんだよね。
今のところ、手探りで、関数ひとつづつ、使って理解していくしかないかも。

私の見たサイトでよければ、こんなところかな。
CSWiki(英語)。>>970さんの指摘ページはここだね、きっと。
ttp://cs.elderscrolls.com/constwiki/index.php/Portal:Scripting
ブログ紹介系(日本語)
ttp://ke-ta-ke-ta.seesaa.net/
ttp://toknohimatubushi.cocolog-nifty.com/blog/2008/01/post_150b.html
なんかすごく詳しい方のブログ
ttp://deutschefrauen.wordpress.com/category/spiele/oblivion/oblivion-mods/
MOD製作されてる方のページ、下のほうのメモが私のお気に入り。
ttp://einsobl.web.fc2.com/index.html

まあ、これみただけでは、理解するのは難しいとおもう。
やっぱりこまごましたものから作るしかないかも。

あと、理解が進んできたら、英語だけどOBSEv19のヘルプに目を通したほうがよいと思う。
新機能満載で、便利な命令とかかなり増えたので、今後v19が主流になりそうな気がする。
ttp://obse.silverlock.org/obse_command_doc.html
974名無しさんの野望:2010/10/28(木) 19:23:14 ID:KESvb/qJ
>>970
ありがとうございます。
本家のCSwikiですか……。
正直英語が全くの苦手で、敬遠してましたが、事ここに至ってはそうも言ってられませんね;
辞書片手に突撃してみて、自分ではどうしようもなくなる部分までなんとかがんばってみますね。

>>971
自分のあまりの知識のなさにちょっとばかりテンパってたかもしれません;
後半部分ももちろん見させていただいたのですが、「なのでここは〜」から「こうしたいんじゃないかな」
の間の部分は最初のと変わっている部分がわからなかったので、その後ろの方を参考にさせていただきました。
elseの行を「elseif (rnd >= iValue)」
これに関しては、仰るとおり、=になる場合を失念していました。
また、GetRandomPercent が一回目と二回目で違う値を返す可能性がある、という事に関しても失念していました。
確かにその場合、一生かかってもアイテムAもBも取得されるはずがないですよね;

それと、もう一つ疑問が出てきてしまったのですが、下から二行目と四行目の「refActor.AddItemNS NPCcheckB 1」という命令はアイテムを1づつ増やす、という処理になるかな、と
考えていたのですが、この場合でも増えていかないのでしょうか?

どうも全般的にかなりの部分で考えが至らない部分が多かったようです……。
970さんに教えていただいたように、CSwikiで勉強して、もう少しマシな状態になってから作り直したいと思います;


今までは、「このMODのこの機能を抽出できればこういうことができそうだな」というスタンスでMODを作成していたのですが、その考え方が甘かったのかもしれないですね。
なんとか、自分で1から作り上げる事ができるように頑張ってきたいと思います。

スレの皆様、お騒がせしました。
975名無しさんの野望:2010/10/28(木) 19:27:03 ID:KESvb/qJ
>>973
リロードしてませんでした;
詳しい情報、本当にありがとうございます!
レスを保存させていただいて、一つ一つじっくり勉強していきたいと思います。

OBSEはv18のままでした……。
とはいえ、まだv18の機能も満足に使えていない状態……。
仰るとおり、もう少し慣れてきてからv19を導入してみたいと思います。
いろいろとありがとうございました!
976名無しさんの野望:2010/10/28(木) 20:32:39 ID:vAxvi3yt
>>974
> 後半部分ももちろん見させていただいたのですが、「なのでここは〜」から「こうしたいんじゃないかな」
> の間の部分は最初のと変わっている部分がわからなかったので、その後ろの方を参考にさせていただきました。
ああ、それは、「ここは」で該当部分を示して、「こうしたいんじゃ」でその代わりを示したつもりでした。
ちょっと書き方がわかりにくかったようでごめん。

> また、GetRandomPercent が一回目と二回目で違う値を返す可能性がある
GetRandomPercentは、「違う値を返す可能性がある」じゃなくて、「毎回0〜99のうちのどれかを返す関数」ですよ〜。
ttp://cs.elderscrolls.com/constwiki/index.php/GetRandomPercent
プログラミング用語だけど、「ランダム」とか「乱数」っていう言葉を調べるといいかも。

> 下から二行目と四行目の「refActor.AddItemNS NPCcheckB 1」という命令はアイテムを1づつ増やす、
> という処理になるかな、と考えていたのですが、この場合でも増えていかないのでしょうか?
うん。アイテムを渡す処理してるから、この処理が走るたびに渡し続けてることになるね。
GameModeは、何度も処理が走るから、このままだと、どんどんアイテム自体が増えていっちゃうよ。
おそらくiCntが増えてるように見えるのは、実際にもってるアイテムの数が増えてGetItemCountの数も増えてるからでしょう(笑)

refActorに何がセットされてるかで「誰に渡してるか」が変わるので、>>974さんはそこが確認できてないんだと思う。
ためしに>>964のスクリプトのrefActorを、全部playerにすると、理解できると思うw

長くなったので続く
977名無しさんの野望:2010/10/28(木) 20:36:07 ID:vAxvi3yt
>>976の続き

あと、DebugPrintやPrintToConsoleのような、コンソールに出力する関数を使って、「どこが処理されたか」とか「そのときの変数の値は期待通りか」
などを確認しながら直していくといいよ。
手間はかかるけど、理解も深まると思う。
ttp://cs.elderscrolls.com/constwiki/index.php/DebugPrint

さっき紹介したメモのページの
ttp://einsobl.web.fc2.com/cs_script.html
PrintToConsoleの説明のところにDebugPrintの利点が書かれてるので、DebugPrintを使うのをお勧め。

> なんとか、自分で1から作り上げる事ができるように頑張ってきたいと思います。
みんな最初は、わからないところから始めてるはずなので、あんまり気にせずがんばってほしいかな〜。
978名無しさんの野望:2010/10/28(木) 20:44:49 ID:tRZGWRul
>>975
レスは特に不要です。もしまだ見ているなら今後のために幾つか有益な情報を。

勉強になる目から鱗のスクリプトのサンプルと説明はここにあります
http://cs.elderscrolls.com/constwiki/index.php/Category:Useful_Code

ただCSWikiを眺めるのはモチベーションが続かないので発想の転換で簡単な実現方法を考えるのはお勧めです。
>>968でSさんが既に書いてますが「全てのNPC」踏み込んで考えると実現方法は結構たくさん出てきます。

1.「プレイヤーが話しかけた全てのNPC」だったら、Menumodeで動くQuestスクリプトを作って
プレイヤーが話しかけた相手のNPCをチェックしてAかBのフラグを与える、という手があります。
2.「あるものを中心に100unit以内の全てのNPC」だったら、ScriptEffectスクリプト付きの範囲魔法を使って
魔法をかけてその魔法に巻き込まれたNPCをチェックしてAかBのフラグを与える、という手があります。
3.「プレイヤーと同一セルにいる全てのNPC」だったら、OBSEを使えば同一セルに存在するリファレンスを取得して
While/Loopなどで端からスキャンするという手があります。
これはGetFirstRefという関数の説明文の意味が分かる人なら試す価値があるかと思います。

CSWikiを見るにしてもどうせなら自分のやりたいことに近いものを少しずつ作る方が
モチベーションが高まると思うので、出来るだけ実現出来そうな(自分で具体的な筋道が細かに考えられる)シナリオを選んで
少しずつMODを作って行くのがお勧めかなと思います。
ちなみに上のは1と2は比較的すぐに作れるようになると思います。
3は汎用的ですがCSというよりForとかWhileのようなプログラムチックな下地が無いと理解しにくいかもしれません。
CSは不慣れだが他言語での慣れや下地があるなら3のケースのサンプルはJPMODForumの
http://oblivion.forum.jpmod.net/viewtopic.php?f=9&t=200#p1094
の「独自関数部」と書いてあるあたりにあるので見てみるとイメージが沸くかもです。
スクリプトは色々楽しいことが出来るので是非深みにはまってみて下さい。
979名無しさんの野望:2010/10/28(木) 20:46:29 ID:vAxvi3yt
>>975
ああ、書くの忘れてた。
OBSEv18の圧縮ファイルの中に、同等のHTMLのファイルがあるから、それを見るといいよ。
(ただ、v19と内容かぶってるやつは、v19のほうが見やすいという・・・なので、私はv18使いながら両方見てたw)

「CSの標準関数+OBSEの関数」で、スクリプトでできることが広がってるから、
それぞれ「何ができるか」を理解するために、関数(Function)のリストを眺めるところからはじめてもいいかもしれない。
あとCSWikiで検索するとその関数を使った例があったりするので、英語読めなくても関数の検索はしたほうがいいかも。
980名無しさんの野望:2010/10/28(木) 21:04:53 ID:vAxvi3yt
>>978
ああ、「こうすればできる」を答えてあげれなかったので、助かります(><
また、私自身も勉強になります。
こういう情報をどんどん出してほしいと思うのは、私だけじゃないはずw

2の方法は、私にとって斬新でした。思いつきませんっ!こんな方法もあるんですね。
あと、3の方法は、DetectItemSpellで似たようなことをやっていた気がします。
(あいまいな記憶で・・・今確認してないけど)

>>967さんがやろうとしてることを、私はまだ作れない(笑)
と、書きましたが、私もこれで作れそうな人wになれそうです。(実際にやってみないとだー)
981名無しさんの野望:2010/10/28(木) 21:25:50 ID:KESvb/qJ
>>980
詳しい説明、ありがとうございました。
先は長そうですが、なんとなく道筋が見えてきたような気がします。
後は勉強あるのみ、ですね!
がんばってみます!

>>978
1〜3の中だと、3がイメージに一番近い気がします。
リンクしてくださったページを眺めつつなんとか理解して、自分のものにしていければ、と思います。
ありがとうございました!

「こういう動作をさせたい」という欲求やネタは多いので、それを実際にできるようになった時のことを妄想しつつモチベーションにして
頑張っていこうと思いますw

皆様、本当にありがとうございました!
982959:2010/10/28(木) 21:56:43 ID:/7Jzi4zB
>>972さん
お答えいただき、ありがとうございます! とても助かりました!

>馬のアニメって人馬一体でヒトのアニメも同じkf内に含んでいます。
すみません、これを知りませんでした!
・Creatures\Horse\IdleAnimsでは馬のアニメを指定して、
・Character\_Male\IdleAnims > SittingAndSleeping > Sitting > RiderIdles
 で騎手のアニメを指定するのかと思っていました。
なので、騎手のポーズを変更する設定の場所を探していました。

>座る/寝るのIdleみたいに任意のkfをIdle時にシステムが自動的に再生する様な指定
単純に、乗馬・下馬以外の座っている時に、指定したポーズをとり続けたかったのです。

Blenderで人間だけのポーズを作って、そのkfファイルを指定しようと考えていました。
しかし、それに馬も含めるやり方はわからないですので、
馬のスクリプトとしてActivate時にプレイヤーのアニメを指定する…がいいでしょうか??

PickIdleでプレイヤーのアニメを指定できるのですか??
PickIdle player <IdleObjects>
というスクリプトでいいのですか??

IdleObjectにはnifファイルしか指定できないようなのですが、
BlenderでExportするときにkfじゃなくてnifにすれば、そのまま使えるのでしょうか??
ポーズMODのスクリプトを見れば、わかることかもしれないのですが…。
983959:2010/10/28(木) 22:14:59 ID:/7Jzi4zB
>PickIdle player <IdleObjects>
こんなコマンドないですね…。

CS Helpには「そのCallingアクターに新しいIdleを選ばせます。」とありますが、
どうプレイヤーを指定して、どう任意のIdleを指定させるのかがわかりませんでした…。
CTAddPose_templateのスクリプトを見ても、
プレイヤーの選んだ選択肢2個を"major"と"minor"の2つの変数に格納してるのはわかったのですが、
それをどう、ポーズの指定に使っているのかがさっぱり…orz
984名無しさんの野望:2010/10/29(金) 00:15:35 ID:36qWl5Y3
>>983
元のポーズを完全に新しいポーズに変えたいなら、元々ある乗馬ポーズをblenderにインポートして
ポーズを変えればいいんじゃない?

pickidleって特殊なアニメを再生させる時しか使わない方がいいよ。解除するまで装備変更不可にな
るし。というより、前後の動作を含めて全てscriptで処理させるのは至難の業かと。
985959:2010/10/29(金) 01:58:59 ID:cwISep/X
>>984さん
乗馬静止時のポーズの変更に成功しました!
まさにおっしゃる通りでした!

Blenderの性質上、インポートの仕方など色々と小細工は必要でしたが、
1)Blenderで馬のkfファイルをインポート
2)乗り手をDeleteする
3)そこに人間だけのkfファイルをインポートして合体!
4)NifSkopeで軽く設定したらもう使えるので、デフォルトkfファイルと置換
で、Idle(静止)のアニメは置き換えできました。

しかし、forwardなどの動くものは、置き換えすると移動できなくなってしまいました。
これはアニメーションを作るしかないのでしょうか?

実はバイクを作っているので、Idleと同じポーズのまま
スルスル地面を滑ってくれればいいのですが(上下動とかが必要ない)、
簡単にアニメーションを作る方法はないでしょうか…??

聞いてばかりで本当に申し訳ないです。
自分でもアニメーションの作り方ちょっと調べてみます。
↓バイクはこんなんです。(IEからじゃないと見れないかもしれません)
ttp://moto4life.web.fc2.com/material/test_moto12.jpg
986名無しさんの野望:2010/10/29(金) 06:18:10 ID:onHj2cMp
987名無しさんの野望:2010/10/29(金) 07:29:06 ID:af9oqhIc
え、一連の話って乗れるバイク型のクリーチャーを作る、て話だったんですか。

だったら唯一最大の問題だった当初の「プレイヤー(だけ)のポーズを変更」の必要って
全然無いと思うのですが。

乗れるバイクを馬方式で作るのなら、一般的には馬とは別にフォルダを作って馬と
同様にそのバイクのSkeletonやらnif類、最低限のIdle/乗り/降り/各移動kfを作って
入れてCSで馬Creatureとして指定、IdleAnimations指定を既存の馬のそれと同じに
すればそれで原則OKです。
IdleAnimationsは構造を変える必要は無く、単に同じにするかLoiterIdle指定が不要
なら省略すればそれで。またこの場合PickIdleの話は特に関係無いです。

乗れるCreatureを作る話はここに。必要な事項が全部載ってます。

http://cs.elderscrolls.com/constwiki/index.php/Making_Ridable_Creatures

Bip01とBip02の混在するkfのキー抽出やマージの出来るツールのリンクもそこに。
既にバイクのSkeletonは出来ているのならkfを作る作業の流れは多分以下みたいな
かんじに。

1) Idle/乗り/降り/各移動のバイクだけの動きのkfをそれぞれ作る
2) 上に対応するヒトだけの動きのkfをそれぞれ作る
3) 上のリンクにあるツールでそれぞれをマージ

アクターが前進後退する動きって通常は「Bip01」のkfでの移動で実現するのですが、
馬の場合は「Bip02」です。乗員のBip01は動かす必要は無いです。
また左右回転はシステムがマウス操作や必要に応じて勝手にアクターを回転するので
kfでの回転は不要です。
ヒトの乗り/降り動作を馬kfから流用するなら、上のツールで馬kfから抽出しても、
単にBlenderでヒトSkeleton+馬の乗り/降りkfをImport→ExportでもOKだと思います。
988名無しさんの野望:2010/10/29(金) 07:54:02 ID:af9oqhIc
続き)
で、もしオリジナルのクリーチャー作成が初めてでしたら、乗員のアニメの話は
とりあえず置いといて、バイク単独での普通のクリーチャー化の確認をまずするのが
良さそうな気が。
適当なWanderのAIパッケでも付けてバイクが一人で勝手に正常に動き回るのを確認
してから乗員アニメ追加の作業をした方が作業手順的にトラブルが少ないかもです。

>>985
あと、疑問なのですが、そのBlenderで静止ポーズの変更に成功した、というのは
馬とバイクのどちらで動作を確認したんでしょう?

なぜそれが気になるかと言うと、本来Bip01/02の混在するkfのBlenderでのImport/
ExportってBoneExMat(SkeletonのImport時に自動的に生成される各Bone座標を保存する
Txt)の関係でそのままでは正常には出来なかった覚えがあるので。

なのでもしその馬idle.kfをそのままバイクに流用してバイクだけで確認した、という
事だと、バイクの場合は恐らく複雑なBone構造やWeight指定は多分していないと思う
ので偶然動いた様に見えているだけな可能性も。

そうではなくて馬で確認して馬も乗員も正常にIdle動作をした、という事なら手順を
もう少し細かく教えて頂きたいのですが。宜しければ以下の点を。

1)の時に同時に指定したSkeletonはどれでしょう?

2)で乗り手の「何を」Delしたんでしょう?

3)の「合体」って何と何にどの操作をしたのでしょう?

あと小細工ってなんですか?

こちらでもその手順が再現出来る程度に教えてもらえると有り難いです。
989名無しさんの野望:2010/10/29(金) 08:13:52 ID:d2nMkBJX
バイクに乗れるMODはFF7系MODの中に入ってたね
姿勢もきちんと変わってた
990名無しさんの野望:2010/10/29(金) 09:27:11 ID:gxkDSSho
クラフトビットエレメンツで増やせる部屋内にSurvival Suite CraftingというMODで
インゴットと武器作成が出来るようにした動画があったのですが
これってSurvival Suite Craftingで加工対応してるオブジェを配置するだけで
対応可能何ですかね?
まあ、クラフトビットエレメンツをOBCE経由で
起動したりしないといけないのはわかるのですけどね
991959:2010/10/29(金) 11:59:13 ID:cwISep/X
>>986さん
実は、そのMODを改造という形で作ってました。

>>987さん
懇切丁寧にありがとうございます!!
実はNR500(バイク)のMODを改造して作っているので、馬とは別の存在として既にできているんです。
しかし、モーションなどは全て馬のコピーなので、これを置き換えようとしました。

乗り降りは違和感がないのでそのまま使おうと思っています。
問題は前進後退のアニメーション作成で、教えていただいた英語のページを見て作ってみたいと思います。
ここができれば、あとは大丈夫そうです!

>で、もしオリジナルのクリーチャー作成が初めてでしたら
初めてなのですが、前述の通り既に別の生物として登録してあるので、多分大丈夫だと思います。
自分で一から作ってたらとても大変でしたね…。


>Blenderで静止ポーズの変更に成功
これは多分、自分の勘違いだったと思います(汗)
992959:2010/10/29(金) 12:00:02 ID:cwISep/X
[手順]
1)NR500のidle.kfファイルを複製する。
2)KFExtractor v0.9で先程のidle.kfをkf→nif、そしてnif→kfと、何もせずに変換する。
 =>そのままではBlenderでは扱えないようなので、KFExtractorで使えるデータに加工
 =>でも、この工程がなくてもBlenderで普通に読み込めた…
3)BlenderでBlender_KF_SupportPack_0_4に入っているskeletonbeast.nifをインポート、
 Keyflame Fileに先程のidle.kfファイルを指定する=>idle.kyを読み込めた
4)表示された人間のワイヤーフレーム(?)をクリックして削除!
 =>多分、これで人馬両方共、全て削除されている気がします。
5)続いて、再びskeletonbeast.nifをインポート、Keyflame Fileに人間のポーズのkfを指定。
 =>多分、人間のポーズだけのデータとなっている。インポートの意味なし。
6)普通にkfファイルとしてExport。=>ファイルサイズが6.93KB、人間だけの可能性大。
7)これをNR500のidle.kfと置き換え。
 =>アイドルモーションとして、バイク側のデータが無くなっている可能性が高い。でも使えた。

実際のところ、NR500のidle.kfファイルを、
人間だけのポーズのkfファイルと置き換えただけなのとほぼ同じことになっている気がします。
>>987さんの鋭い指摘、まさにその通りだと思います(汗)

英語のページを見てアニメーションの勉強してきます!

>>989さん
それを見て勉強したほうが良さそうですね。
993名無しさんの野望:2010/10/29(金) 13:41:45 ID:6MzhTCS+
その前に次スレ
994名無しさんの野望:2010/10/29(金) 15:21:23 ID:n2jd01Ua
所々のレスから、なる臭する
くせぇーから来んなよ
995名無しさんの野望:2010/10/29(金) 15:25:34 ID:qjXK1sjZ
OBLIVION MOD作成支援/相談スレPart6
http://yuzuru.2ch.net/test/read.cgi/game/1288333470/


言いにくいんだけど、スレ番間違っちゃってさあ・・・
996名無しさんの野望:2010/10/29(金) 18:30:11 ID:af9oqhIc
え、一連の話ってそのMODの改造の話だったんですか。

バニラでは無くてユーザーMODをさらに改造する話になると、こちらではそもそも
その元になるMODの動作自体に確証が無いので、「こうすればOK」みたいな話が非常に
し辛かったりはするのですが。でもとりあえず。

>>991
詳しい手順ありがとうございます。

手順を拝見する限りやはり最終的に単にヒトだけのkfになっていそうな気が。
でもIdle時だけならバイク側のキーが無くてバイクが動かなくても別にOKな気も。
なので現状それで問題無いのならそれでいいのでしょう。多分。

前後移動のkfの場合はバイクのキーは重要です。無いと多分動かないと思います。

またBlenderでそのMODのSkeletonが読めないのは「ActorParent」の親が二つあるから
です。Bip02Spine2→Childrenの中の「195(ActorParent)」を「-1」にすれば多分。

あと走行中に車体が上下するのは馬の腰部の動きがそのまま残っているからです。
Bip02Pelvis/Spine/Spine0/Spine1/Spine2のキーを最初と最後だけ残して後は全部Del
すれば基本的にはいいのですが。

但し、恐らくkfによってはBlenderにImport/Exportするとバイク全体が変な方向を
向く事があり修正が非常に面倒な場合も。
Blender上であらかじめBip02を回転させたり、Export後にNifSkopeで
NiTransformInterpolator→Y:P:Rを弄ったりでひょっとすると修正は可能かもですが。
NifSkopeで直接キーを変更する手もあるかもですが、もしBSplineだと手修正は難し
そうな気も。

この辺が馬流用MODをさらに改造しようとするが故の限界かもです。
997名無しさんの野望:2010/10/29(金) 19:13:10 ID:af9oqhIc
投げっぱなしもアレなので。

単に車体の揺れを抑止するのなら、kf自体は変更せずにメッシュのWeightのVertex
Groupを変えるのが現状では一番簡単確実かもです。
Bip02Spine2になっているのを揺れの無いBip02NonAccumとか単にBip02にするとか。
998959:2010/10/29(金) 21:03:49 ID:cwISep/X
nifファイルの "2 NiStringExtraData"のValueをBip02 NonAccumにすると、確かに揺れがなくなりました!!

ゲームで確認するとバイクが地面から突き出っぱなしになるので、同じくnifファイルの "0 NiNode"の
・Translationを X:0 Y:-18 Z:0
・Rotationを Y:0 P:90 R:0
と2つ設定したところ、kfファイルには全く触れずにバイクが静止状態で正しく走るようになりました!!

ポーズは通常の騎乗のままなので、ここで最初に書いた通り
CSの ゲーム効果 > 待機アニメーションの
Character\_Male\IdleAnims > SittingAndSleeping > Sitting > RiderIdles で
人間の静止ポーズだけのkfファイルを指定して
Special Idle OR Whole Body、Must return a file、GetSitting == 13 にしたところ
乗った直後は通常の騎乗ポーズですが、このアニメが3秒ほどで再生されてポーズが固定され、
乗馬中はずっとこのポーズ、なぜか下馬する時も、下馬した後もこのポーズのままでした。(Fキーで解除可能)

ポーズが固定されるのは多分、kfファイルのPriorityが99で高すぎるからでは…?と考えてます。

非常に邪道かつその場しのぎ的な設定ですが、とりあえずできてほっとしてます!
アドバイスがなければ絶対に無理でした! 本当にありがとうございます!!

アニメーションを理解して、kfファイルを作って置き換えるのが本来だと思いますが、
それには時間がかかるので、じっくり取り組んでいきます。
今、CS WikiのBasic Animation Tutorialからじっくり読んでいます。英語でなかなか進みませんが…。
999名無しさんの野望:2010/10/29(金) 22:27:37 ID:af9oqhIc
え、ヒト側のIdleAnimationsでの乗馬姿勢の指定の話ってまだ続いてたんですか。

ちょっと長くなりますがGetSittingでのIdle指定の話を。

例えば座りIdleの指定の「DefaultSitIdles」を見ると分かると思うんですが、まず、
Idle指定の条件はGetSittingが「3」(座った状態)ではなくて「1」(LoadingSittingIdle)
の時です。
また、IdleAnimationsは毎フレーム判定されているのではなくて、特定の状態変化が
あった時(それと多分適当な一定周期)に判定されます。

実際の動作の流れとしては、椅子をActivateしてGetSittingが1になると同時に
システムはIdleAnimationsの指定をチェックして座りIdleのkfがロードされて再生も
始まります。
で、多分そのフレームの前後ぐらいでGetSittingが「2」になってまたシステムの
チェックがあり、それと同時にPriorityの高い椅子に座る動作のkfの再生が始まり、
2つのkfは同時に再生され、座る動作が終るとIdle動作が表面に出て来てGetSittingも
3になる、という流れです。

この流れはコンソールでtdt、sdt1として再生中のkf名を見ていれば大体確認出来ると
思います。
続く)
1000名無しさんの野望:2010/10/29(金) 22:29:07 ID:af9oqhIc
続き)
なのでもし乗馬姿勢のIdle指定が出来るとするなら、GetSittingが「11」(LoadingHorse
MountIdle)の時と考えるのが妥当な気が。
(GetSittingが「13」のRiderIdlesは乗馬中のランダムな動作の指定をするつもりで用意
はしたけど結局使わなかった、みたいな制作上の名残でしょう。多分)

そこで問題は乗馬時のGetSittingが11,12,14の時に座る時同様にIdleAnimationsの
チェックとIdleや乗り/降りkfのロード、再生をシステムはしてくれるのか、という
点だと思います。

これは実際にその指定をしてみれば分かりますが多分システムはGetSittingが
「11」になってもIdleAnimationsをチェックしていない可能性が。
バニラで指定がされていないので仕様上の規定はあってもシステムの不要な動作を
避ける為にチェック自体を省いた、という事も充分考えられます。

と言う事でIdleAnimationsでは乗馬Idle指定を実現するのは厳しいかもです。

でもこれは適当に確認しただけの推測なんで要追試だとは思います。

うお、1000だ。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。