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

自作MODの更新です
公開していた2つのMODを更新しました。
更新内容は以下の通り。


・TeleportMagic
表示されるメッセージボックスをもうちょっと分かりやすいよう、TeleportTargetSetでこれからセットする人物の名前がウインドウに出るようにしました。
また、ターゲットが座ったり寝ていたりすると家具にめり込んでしまう不具合を解消しました。


・LevelDownMOD
表示されるメッセージボックスをもうちょっと分かりやすいようにしました。
また、使用後にPCのレベルがメッセージで表示されるようにしました。
ただし、MessageBoxExをつかったため、OBSEが必須になりました。


ダウンロードは左のカテゴリが自作MODの所からどうぞ。
スポンサーサイト

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

ゲーム内設定(GameSetting)に関して
MODは、なにかを追加するだけじゃなく、色んな設定を変更するだけでも立派なMODになります。
ゲーム内設定を書き換えるだけのMODでも、結構昔から人気があったりします。

そのゲーム内設定についての覚書です。


場所はGameplay(ゲーム効果)→Settings(ゲーム内設定)で開くウインドウです。



ここはゲームのシステムで使われている変数が沢山あり、ここはまさにゲームの心臓部にあたる部分で、ここを変更するとゲーム全体に影響が出ます。
ここにある変数は追加が出来ないのに何故か名前の変更が出来てしまいます(CSのバグ?)が、変更はしてはいけません。
大半の変数は複雑な計算に使われているもので、ちょっと数値を変えただけでは分かりにくいものや、
逆にちょっと変えただけなのに大きな影響が出るものもなど、様々あります。



ここにある変数の名前のつけ方にはある程度法則性があり、先頭の一文字めのによって3つの種類に分かれています。

・Fから始まる…小数点を持つのゲームの設定
・Iから始まる…整数のゲーム設定
・Sから始まる…文字のゲーム設定(システムメッセージ等)、一部のアイコンの定義も含まれる。

名前に「Base」と付いた物よりも「Mult」や「Max」、「Min」と付いた名前のほうが与える影響が大きいようです。
特に「Mult」は計算式の中で乗数であることが多く、少し変えただけで顕著に影響が出ます。




Wrye BashのBash Patchで一部設定出来るものもあります。(Tweak Settingsのところです)
どう使われているのか、何の意味があるのか良く分からないものも多いですが、以下に有用そうなものをまとめてみました。

Wrye Bashで設定できる項目はなるべく除いてあります。順不同です。


・FActorAnimZAdjust…アクターのZ軸の距離、この値を大きくするとアクターが常に地面から浮くようになります(見た目だけ)。靴のMOD装備が地面に埋まる時はこの値をすこしだけ大きくするといいかも。


・FActorSwimBreathBase…水中に潜った時の息のベース値
・FActorSwimBreathDamage…水中に潜った時の毎秒受けるダメージ量(healthの何パーセントか)
・FActorSwimBreathMult…水中に潜った時の息の計算に使う数値


・FAIMaxWanderTime…Wanderパッケージの中で歩いていない時間の計算に使う数値、0にすると常に歩き続けるようになる。(狙撃が難しくなるため弓の難易度が上がる。)


・FArrowSpeedMult…パワーアタックの時の矢の飛ぶ早さの最大値、これを元に計算するため実際はベース値。
・FArrowGravityBase…パワーアタックの時の矢が重力の影響を受けるベース値、小さくするとより真っ直ぐ飛ぶようになる。
・FArrowGravityMult…パワーアタックの時の矢が飛ぶ時に重力の影響を受ける計算に使う数値、これを大きくすると低速(スローモーション)の矢になる。
・FArrowOptimalDistance…NPCが弓矢を使う距離の計算に使われる数値、最適距離値。
・FArrowMaxDistance…NPCが弓矢を使う最大距離値(実際の距離はこれらと、その時のCombat Styleの設定によって決定されます。魔法にも同様の設定があるため、使う距離を弓と差別化することができます。)
・FArrowWeakGravity…パワーアタックでない時の、矢が重力の影響を受けるベース値
・FArrowWeakSpeed…パワーアタックでない時の、矢の飛ぶ早さのベース値
(弓矢の挙動に関係するものはこのほかにも沢山あります。)

・fBlockAmountHandToHandMult …素手の時のブロックのダメージの低減量の計算に使う数値
・fBlockAmountWeaponMult …武器の時のブロックのダメージの低減量の計算に使う数値
・fBlockMax …盾でのブロックスキルの最大効果発揮時の限界値。デフォルトでは0.75のため、75%のダメージを軽減するのが最大となる。
・fBlockScoreNoShieldMult …素手や武器でのブロックスキルの最大効果発揮時の限界値。デフォルトでは0.5のため、50%のダメージを軽減するのが最大となる。
・fBlockSkillBase …ブロックのスキルが0の時のダメージ低減量、ただしfBlockMaxでキャップされる。
・fBlockSkillMult …ブロックのスキルが100の時のダメージ低減量、ただしfBlockMaxでキャップされる。
(これらBlockの変数は全て1.0の値は100%を意味します)

・fDamagePowerAttackBackBonus …後退の移動キーを押しながらのパワーアタック時のダメージボーナスの計算に使う数値
・fDamagePowerAttackBonus …パワーアタック時のダメージボーナスの計算に使う数値
・fDamagePowerAttackForwardBonus …前進の移動キーを押しながらのパワーアタック時のダメージボーナスの計算に使う数値
・fDamagePowerAttackSideBonus …横移動の移動キーを押しながらのパワーアタック時のダメージボーナスの計算に使う数値
・fDamagePowerAttackStandBonus …移動キーを押さないパワーアタック時のダメージボーナスの計算に使う数値
・fDamageSkillBase …武器で攻撃した時のダメージのベース値(スキルが0の時)
・fDamageSkillMult …武器で攻撃した時のダメージのベース値(スキルが100の時)
・fDamageSneakAttackMult …スニークアタックの時の計算に使う数値
・fDamageStrengthBase …武器で攻撃した時のダメージ計算のうち、腕力あるは素早さが影響する分の計算に使うベース値
・fDamageStrengthMult …武器で攻撃した時のダメージ計算のうち、腕力あるは素早さが影響する分の計算に使う値、影響の大きさ
・fDamageToArmorPercentage …防具の消耗具合の計算に使う数値
・fDamageToWeaponPercentage …武器の消耗具合の計算に使う数値
・fDamageWeaponConditionBase …武器の消耗具合のダメージ計算に使う数値
・fDamageWeaponConditionMult …武器の消耗具合のダメージ計算に使う数値、上を1でこれを0にすれば消耗具合に関係なく常に同じダメージになる。
・fDamageWeaponMult …武器の攻撃力の計算に使われる数値、0.5がデフォルトで、これを1.5にするとすべての武器のダメージが3倍になる。
・FKnockdownChance…パワーアタック時の気絶させる時の計算に使う数値、増やせば気絶させやすくなる。
・FKnockbackForceMax…気絶させるパワーアタック時のアクターを吹き飛ばす時の計算に使う数値、増やせば吹き飛ばしの距離が伸びる。
・FPowerAttackDelay…パワーアタック実行までに攻撃ボタンを押し続けなければいけない時間の計算に使われる数値、パワーアタックにかかる時間そのものではない。
・fPowerAttackFatiguePenalty …パワーアタックの消費スタミナの計算に使われる数値
(戦闘のシステムを変更するMODは大抵このあたりがいじられている。)

・fHandDamageSkillBase…素手のスキルの攻撃力の計算に使うベース値
・fHandDamageSkillMult…素手のスキルの攻撃力の計算に使う数値
・fHandDamageStrengthBase…素手の腕力の攻撃力の計算に使うベース値
・fHandDamageStrengthMult…素手の腕力の攻撃力の計算に使う数値
・fHandFatigueDamageBase…素手のスタミナダメージの攻撃力の計算に使うベース値
・fHandFatigueDamageMult…素手のスタミナダメージの攻撃力の計算に使う数値
・fHandHealthMax…素手の拳へのダメージの最大値
・fHandHealthMin…素手の拳へのダメージの最小値
・fHandReachMult…素手の射程距離、デフォルトの数値は0.6で、ゲーム中は5feetの距離
(武器の有り無しで別の数式を計算に使っている。)


・fDeathForceForceMax…死体が吹き飛ぶ最大値
・fDeathForceForceMin…死体が吹き飛ぶ最小値
(アクターが死ぬと、死体がこの数値の範囲内で吹き飛びます、この数値を大きくすると面白いけど、回収がめんどくさくなります。)


・FEssentialHealthPercentReGain…不死身(Essential)のNPCが気絶から目覚めた時にどれだけ回復しているかの割合。


・fMagicArmorPenaltyMax …鎧を身に着けている時の魔法の効果減少の最大値、デフォルトは0.3で、70%の効果になる
・fMagicArmorPenaltyMin …鎧を身に着けている時の魔法の効果減少の最小値、デフォルトは0.05で、95%の効果になる
・fMagicDurMagBaseCostMult…呪文のコストの計算に使われる数値、この値を呪文ごとの設定値に乗算される。
・fMagicCostScale…スペル等級による魔法のコストへの影響力を決める数値。
・FMagicAreaBaseCostMult…魔法の範囲による魔力コストへの影響の数値。
・fMagicRangeTargetCostMult…魔法の種類(ターゲットorタッチ)による魔力コストへの影響の数値、ターゲットの場合はこの値を乗算される。
・fMagicCasterSkillCostBase…魔力コストへの影響の数値、呪文を唱えるためのベースコストになる。
・fMagicCasterSkillCostMult…スキルレベルによる魔力コストへの影響の数値。振れ幅の大きさになる。
(魔法に関係するものはこのほかにも沢山あります。)


・fMoveCharWalkMin…キャラクターの移動スピードの計算に使うベース値の一つ
・fMoveCharWalkMax…キャラクターの移動スピードの計算に使うベース値の一つ
・fMoveCreatureWalkMin…クリーチャーの移動スピードの計算に使うベース値の一つ
・fMoveCreatureWalkMax…クリーチャーの移動スピードの計算に使うベース値の一つ
・fMoveRunMult…走った時のスピードの計算に使う数値の一つ
・fMoveRunAthleticsMult…走った時のスピードの計算に使う数値の一つ、Athleticのスキルの影響の大きさ。
・fMoveSneakMult…スニークモード中の速度倍率、これが1だと歩きと同等の速さになる。
(移動スピードの計算は複雑で、この他にも沢山あります。)


・fDistanceExteriorReactCombat…敵(味方)が戦闘中であることを検出する範囲、屋外
・fDistanceInteriorReactCombat…敵(味方)が戦闘中であることを検出する範囲、屋内


・fGrabPower…グラブキー(デフォルトで「Zキー」)でオブジェクトを移動させる時のスピードのベースになる値、大きくすると、重たいものでも素早く動かせます。


・FJumpFallSkillBase…落下ダメージ計算の内、アクロバットのスキル値の計算部分のベース値
・FJumpFallSkillMult…落下ダメージ計算の内、アクロバットのスキル値の計算部分の影響の大きさの値
・FJumpFallTimeBase…デフォルトでは0、落下ダメージの落下した時間に関係しないダメージ
・FJumpFallTimeMin…落下ダメージの発生開始時間(落下ダメージは落下した時間(秒)に元づいて計算されます)
・FJumpFallTimeMult…落下ダメージの毎秒のダメージの数値
・FJumpFallVelocityMin…落下の速さの数値
・FJumpHeightMax…アクロバットのスキルが100の時のジャンプの高さ
・FJumpHeightMin…アクロバットのスキルが0の時のジャンプの高さ
(現在のジャンプ力はスキルによってこの二つの間から決定されます。)
・FJumpMoveBase…デフォルトでは0、空中でどの程度制御効くかのベース値
・fJumpMoveMult…空中でどの程度制御効くかの数値、ベース値を変更するよりも影響が大きい


・FPickPocketMaxChance…スリの成功する最大確率
・FPickPocketMinChance…スリの成功する最小確率
(現在の確立はスキルによってこの二つの間から決定される、両方100.0000にすれば確実に成功する。)


・FVanityModeWheelMax…三人称視点の時のカメラとPCの最大距離
・FVanityModeWheelMin…三人称視点の時のカメラとPCの最小距離
(二つの数値を同じにすれば三人称視点の時のカメラ距離は固定にできそう。)
・FVanityModeWheelMult…三人称視点の時のカメラのズームの幅
・fVanityModeXMult…X軸のカメラの移動速度の数値
・fVanityModeYMult…Y軸のカメラの移動速度の数値
・fChase3rdPersonXYMult…プレイヤーの旋回に対するカメラの追従の速度、これを99にしたのが「ChaseCameraMod」であり、Wrye Bashに同等の設定あり。


・ICrimeAlarmRecDistance…犯罪を通報できる距離、というかガードの地獄耳の範囲。この距離以内にガードがいると、犯罪発生時にガードが飛んできます。

・ICrimeDaysInPrisonMod…牢屋に入れられる期間の計算に使う数字、「賞金/ICrimeDaysInPrisonMod」の計算になる。

・iDeathDropWeaponChance…NPCが死んだ時に武器を落とす確率、MPCのようなコンパニオン系MODを入れているときは0にすると楽。

・ILevelUpSkillCount…レベルアップまでに必要なメインスキルを上げなければいけない数、10がデフォルト。

・IHoursToRespawnCell…リスポーン期間の定義、単位は時間で72(3日)がデフォルト。


・fPerkHeavyArmorExpertSpeedMult …重装鎧のExpertのスキル特典で加重されるスピード、デフォルトで0.5
・fPerkHeavyArmorMasterSpeedMult …重装鎧のMasterのスキル特典で加重されるスピード、デフォルトで0.0
・fPerkLightArmorExpertSpeedMult …軽装鎧のExpertのスキル特典で加重されるスピード、デフォルトで0.0
・fPerkJumpFatigueExpertMult …ジャンプのExpertのスキル特典で飛んだ時のスタミナ消費量に掛けられる数値、デフォルトで0.5
・IPerkAttackDisarmChance…横移動のパワーアタックを使った時の武器を落とさせる確立(パーセント)
・IPerkBlockDisarmChance…ブロックのMasterのスキル特典で相手の武器を落とさせる確立(パーセント)
・iPerkBlockStaggerChance …ブロックのExpertのスキル特典で相手をよろめかせる確立(パーセント)
・iPerkExtraBarterGoldMaster …商人のExpertのスキル特典で投資できる金額
・IPerkMarksmanKnockdownChance…弓矢のExpertのスキル特典で相手を気絶させる時の可能性(パーセント)
・iPerkMarksmanParalyzeChance …弓矢のMasterのスキル特典で相手を麻痺させる時の可能性(パーセント)
(これらの数字を大きくすると有利になるように思えますが、実際は敵にパワーアタックを使われた時にうざい事になるだけで、お勧めしません。)


・IActivatePickLength…プレイヤーがオブジェクトをアクティベートすることが出来る距離。

・IInventoryAskQuantityAt…インベントリメニューでスクロールする幅、UIをいじって沢山表示させているなら、この数値も増やしたほうが便利かも。

・IMagnitudeLevelAffectsAll…ターンアンデットなどの威力が「LV」になる魔法で、最大威力(100)で効果が何LVまで影響するかの設定。PCのLVが上がると産廃になる魔法も、ここをいじればまた使えるようになる。

・IVampirismAgeOffset…ヴァンパイア化したときの加齢の数値(ヴァニラではヴァンパイア化したときこの数値ぶん加齢することで姿の変貌ぶりを表現しています)、Wrye Bashにこれを0にする設定あり。

・IActorLuckSkillBase…色んな所の計算で使われている「運」の計算に使う数値。運の影響力を殺すのに使われている。デフォルトで-20
・FActorLuckSkillMult…色んな所の計算で使われている「運」の計算に使う数値。運の影響の大きさに使われている。デフォルトで0.4
(運の影響力は「iActorLuckSkillBase + fActorLuckSkillMult * Luck」の計算のため、初期値の50ではちょうど影響が0になる。)


■以下はある程度の塊になっているものです。右側の数字はヴァニラの状態の数値です。


・攻撃を受けた時にどの部位の防具がダメージを受け取るかの割合(合計が100にしないといけない)
iArmorDamageBootsChance10
iArmorDamageCuirassChance25
iArmorDamageGauntletsChance10
iArmorDamageGreavesChance15
iArmorDamageHelmChance10
iArmorDamageShieldChance30
…もしも合計が100より小さかった場合、その差分はロストします。(防具がダメージを受けない可能性が出てくる)
 オブリビオンの仕様として、盾はブロックしている時でないと損傷しません。



・武器をエンチャントする時のソウルジェムのそれぞれの容量の数値(これはエンチャントに使う時の数値、チャージの時とは別)
fEnchantmentPettyLimit15.0000
fEnchantmentLesserLimit25.0000
fEnchantmentCommonLimit40.0000
fEnchantmentGreaterLimit60.0000
fEnchantmentGrandLimit85.0000



・弓でのスニークアタックのボーナスのそれぞれの熟練度の倍率の数値
fPerkSneakAttackMarksmanNoviceMult2.0000
fPerkSneakAttackMarksmanApprenticeMult3.0000
fPerkSneakAttackMarksmanJourneymanMult3.0000
fPerkSneakAttackMarksmanExpertMult3.0000
fPerkSneakAttackMarksmanMasterMult3.0000

・近接武器でのスニークアタックのボーナスのそれぞれの熟練度の倍率の数値
fPerkSneakAttackMeleeNoviceMult4.0000
fPerkSneakAttackMeleeApprenticeMult6.0000
fPerkSneakAttackMeleeJourneymanMult6.0000
fPerkSneakAttackMeleeExpertMult6.0000
fPerkSneakAttackMeleeMasterMult6.0000
…スニークアタックはヴァニラではApprenticeレベル以降は同じ数字になっているため、それ以上威力が大きくならない。


・呪文のランクを分けるためのしきい値、メイジ大学での呪文作成の時に特に重要になる。
fMagicSpellLevelApprenticeMin25.5000
fMagicSpellLevelJourneymanMin62.5000
fMagicSpellLevelExpertMin149.5000
fMagicSpellLevelMasterMin399.5000

 


・レベルアップのときの能力値を上げられる数の定義
ILevelUp01Mult2
ILevelUp02Mult2
ILevelUp03Mult2
ILevelUp04Mult2
ILevelUp05Mult3
ILevelUp06Mult3
ILevelUp07Mult3
ILevelUp08Mult4
ILevelUp09Mult4
ILevelUp10Mult5
…「All+5AttributeModifiers」は、これを全て5にすることで実現している。


・スキルの特典(Perk)をそれぞれいくつのスキルレベルで得られるかの定義
iSkillApprenticeMin25
iSkillJourneymanMin50
iSkillExpertMin75
iSkillMasterMin100



・ソウルジェムのそれぞれの容量の数値の設定。(これはチャージに使う時の数値、エンチャントの時とは別)
iSoulLevelValuePetty150
iSoulLevelValueLesser300
iSoulLevelValueCommon800
iSoulLevelValueGreater1200
iSoulLevelValueGrand1600

 


・錬金術で、それぞれのレベルでいくつの効果が見れるかの定義
iWortcraftMaxEffectsNovice1
iWortcraftMaxEffectsApprentice2
iWortcraftMaxEffectsJourneyman3
iWortcraftMaxEffectsExpert4
iWortcraftMaxEffectsMaster4
…ここがMasterレベルでも4のため、材料に効果を4つ以上つけても意味が無い。


・錬金術で、それぞれのレベルでいくつのポーションを飲めるかの定義
iMagicMaxPotionsNovice4
iMagicMaxPotionsApprentice4
iMagicMaxPotionsJourneyman4
iMagicMaxPotionsExpert4
iMagicMaxPotionsMaster4
…せっかく用意されているのにヴァニラでは一律で4になっている。


・それぞれの犯罪の賞金額
iCrimeGoldAttack40
iCrimeGoldJailBreak50
iCrimeGoldMurder1000
iCrimeGoldPickpocket25
iCrimeGoldStealHorse250
iCrimeGoldTresspass5 (毎秒の額)





最大値に最小値より小さい数字を入れる、あるいはその逆をすることはお勧めしません。最悪CDTします。

あと、ゲーム内設定の数値はなぜかWrye BashでBash Patchにマージできる項目と出来ない項目とがあるようです。
どれがそうなのかはいまいち法則性が分かりません。やってみないとわからないようです。
どれくらい影響が出るのか分からない数値をいじる時は、元の何倍か、あるいは何分の一かという尺度でいじるといいです。




これらゲーム内設定の値は「GetGameSetting」で取得が出来ます。
・書式
GetGameSetting [変数名]


また、OBSEの追加関数の「Con_SetGameSetting」「SetNumericGameSetting」「SetStringGameSettingEX」でゲームの設定を変更できるようです。
「Con_SetGameSetting」と「SetNumericGameSetting」は基本的に同じ意味ですがうまく動作しないことがあるようで、そういう時はもう片方を使ってみるといいようです。
「SetStringGameSettingEX」はゲーム内設定の文字列値(Sから始まる変数)を設定するのにつかいます。
・書式
[関数名] [変数名] [数値]

…ただし、これらコマンドによる変更はセーブデータには保存されないようです。




これらは本家のCSWikiの中から抜き出したものです。
そちらを参照すればもっと詳しく乗っています。一部は計算式も判明しています。
ただ、当然英語だし、項目がものすごく多いうえ、全部の意味が分かっているわけでもありませんが…。



今の自分の環境では「FActorAnimZAdjust」を2.0000に、
MPCコンパニオンが死んだ時武器を落とさないように「iDeathDropWeaponChance」を0に、
走った時、早くなりすぎないように「fMoveRunMult」を2で「fMoveRunAthleticsMult」を1.2に、
LVが上がりにくいように「ILevelUpSkillCount」を12に、
スニークアタックの威力が上がるように「fPerkSneakAttack...」のJourneyman以降も数値が増えるようにしています。

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

Magic Effect Scriptの仕様について一つ
Magic Effect Scriptの仕様についてですが、どうやらこれはDialagのスクリプトと同様にターゲットになるアクターのIDを省略して書くことが出来るようです。

例えば魔法を当てたNPCにアイテムを渡すスクリプトを書くのに、いちいち魔法が当たったアクターのRefIDを取得して

[RefID].additem [アイテム名] 1

と書くのではなく、ただ単に

additem [アイテム名] 1

と書くだけでも魔法が当たったアクターにアイテムを渡すことが出来るようです。


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

GenocideMagic
■概要
ドラクエのニフラムのように、PCよりLVの低い敵を消し去る魔法を覚えます。
名前がGenocideなのは、あっけなく消える様子が、ニフラムというよりも、風来のシレンのジェノサイドの巻物の効果のように、見えたからです。

「Genocide」という魔法(召喚魔法)を覚えます。

条件としては、相手がこちらよりもLVが低いことと、
相手がクリーチャーであることと、
相手が戦闘中であることになります。


ダウンロードはこちら
http://www.4shared.com/zip/NON0Yq6v/GenocideMagic.html


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

MOD作り9
ドラクエのニフラムのような魔法を作れそうだったので作ってみました。

動作としては、魔法を当てて、プレイヤーよりもLVが低かったらDisableするという単純なものです。
Disableしたオブジェクトは、実際は消えてなくなるのではなく、無効化して見えなくなるだけでデータはそこに存在しているのですが、
ザコ敵ならばセルのリスポーンの時に掃除されるはずなので、Disableして放って置いても問題は無いはずです。


ただし、LVだけの条件でどんな敵もDisableしていたらクエストに関係するNPCも消してしまう可能性があり、もしそうなったら大変なことになるのでもう少し条件を厳しくしました。

まずは「GetIsCreature」でクリーチャーかどうかを判断して相手がクリーチャーの時だけ発動するようにしました。
(「GetIsCreature」はクリーチャーだった場合は1を、そうではない場合は0を返す関数です。)


ただ、これだけでは羊などの無害な家畜も巻き込んでしまうのでもう一つ条件がほしい所。
そこで、「IsActorEvil」で相手が悪の派閥にいる場合の条件を足そうと思いましたが、これは断念しました。
なぜなら、「IsActorEvil」は、相手の所属している派閥が悪の派閥のみの場合のみ1を返す関数なので、悪ではない派閥と悪の派閥の両方に所属している相手には効かないことになってしまいます。
それに、一部の大型MODでは、野生動物の派閥を変更して悪の派閥ではなくしてあったりするので、これはちょっと使いづらいです。


そこで、「IsInCombat」をもう一つの条件に使いました。
これは相手が戦闘状態の時に1を返す関数です。これなら、無害な家畜を巻き添えにせずに済むと同時に、敵対的な相手に効果を与えることが出来ます。
…ただ、不意打ちは出来なくなってしまいましたが。


以下がスクリプトの内容になります。
if文が3つあって入れ子になっているため、ぱっと見複雑そうですが、順に見ていけば理解できると思います。

Ref Actor
Short PCLV
Short AcLV

begin ScriptEffectStart
if GetIsCreature == 1
 if IsInCombat == 1
 set PCLV to player.GetLevel ;PCのLVを取得
 set Actor to GetSelf ;ActorのRefを取得
 set AcLV to Actor.GetLevel ;ActorのLVを取得
  if PCLV > AcLV ;判定
  Actor.Disable
  MessageEX "%nを消し去った",Actor
  else
  MessageEX "%nのレベルが 高いため 実行できません(LV.%.0f)",Actor,AcLV
  endif
 else
 Message "相手が現在戦闘中ではありません"
 endif
else
Message "相手がクリーチャーではありません"
endif
end

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

MOD作り8
一時的に好感度を上げるチャームの魔法はあるけれど、
それと逆の効果の魔法は作れないかなと思って作ってみました。



Ref Actor
Short AcVar
Short AcVarM

begin ScriptEffectStart
set Actor to GetSelf
set AcVar to Actor.GetDisposition Player
set AcVarM to 0 - AcVar
Actor.ModDisposition player AcVarM
end

begin ScriptEffectFinish
Actor.ModDisposition player AcVar
end

案外、短くて簡単に出来ました。
これだけです。

見ての通り、スクリプトは「begin ScriptEffectStart」と「begin ScriptEffectFinish 」で二つのブロックに分かれています。


スクリプトの開始条件には、魔法のスクリプトにだけ使える特別なものとして、
「ScriptEffectStart 」「ScriptEffectFinish 」「ScriptEffectUpdate」があります。
それぞれ、

・ScriptEffectStart…魔法の効果が現れた時に初めに一回だけ走る。(結果的に「OnHitWith (魔法ID)」と同じ動作。)
・ScriptEffectFinish…魔法の効果が切れる時に一回だけ走る。
・ScriptEffectUpdate…魔法の効果が現れている間中走る。(結果的に「GameMode 」と同じ動作。)

となっています。


新しい魔法を作るにはこの、「ScriptEffectStart 」と「ScriptEffectFinish 」の二つは、なかなか使い勝手が良いです。
こういう風に書いておけば、魔法の効果時間がそのままスクリプトで書いたことを行う時間になるからです。
なので、二つのブロックはそれぞれ、魔法の効果の処理と、効果が切れた時に元に戻す処理になっています。

また、魔法の重ねがけをしたら、効果が重複するんじゃないかと懸念していましたが、それも問題ありませんでした。
どうやら魔法の重ねがけをすると、いったん「ScriptEffectFinish 」が走ってから「ScriptEffectStart 」が走る
という動作をするようで、運用に支障はありませんでした。


スクリプトの中でやっている事を簡単に説明すると、
最初のブロックは、まず最初に
「set Actor to GetSelf」で魔法が当たったキャラのRefIDを取得して、「Actor」という変数に格納。
次にActorのプレイヤーへの好感度を取得し「AcVar」という変数に格納。
次に0から「AcVar」の数値を引いた数を「AcVarM」という変数に格納。(これにより、好感度分のマイナスの数字になる)
次にActorのプレイヤーへの好感度を「AcVarM」の分プラスする。(中身の数値は現在の好感度分のマイナスの数字のため、好感度が0に)

二つ目のブロックでは「AcVar」の分、プレイヤーへの好感度をプラスすることで元の好感度へと戻しています。



ただ、作ってみたのはいいものの、これ、好感度の低い時のセリフを確認するくらいしか使い道が無い魔法のような…

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



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