GOREとにゃんこの桃源郷

主観的にCDのレビューやら、日記やら、色々と。
ゴアとかメタルとかロックとか

願望メモ ※これは攻略記事のようなメモです。

2024-02-02 | The Sims 4

 願望に挑戦する中で、達成方法や注意点が分かりにくかったもの、気付いたもののメモ。基本的にはゲーム画面で項目にマウスを載せるとやり方が出てくるので、それに従えばクリア可能。その他は各所で攻略記事があるため割愛しています。

願望 項目

ボディビルダー シムの身体に眠る潜在能力を最大限まで引き出す

 ⇒筋肉量を最大にする。ひたすらトレーニング。キャリア「宇宙飛行士」の途中から日課がトレーニングなので相性が良い。

音楽の天才 他のシムに3時間音楽を指導する

 ⇒こちらがスキルレベル10、且つ相手がスキルレベル10未満でないと指導出来ないので注意。指導条件はピアノ、ギター、ヴァイオリン、歌、それぞれのスキル毎だが、願望としては「音楽」と広い括りなのでどのスキルでもOK。一人世帯の場合は家に楽器を置いて誰かが弾くのを待つか、バー等に出掛けて待つかと思うが、スキル持っていないシムは待ってても弾き始めないっぽい気がしないでもないので大変かも。

悪のキューピッド 浮気な行動を取る

 ⇒10回行う。連続でやりすぎると浮気されたシムがストレスで死を迎えることもあるので注意。※死を目撃させる方法の1つにもなり得る。

悪のキューピッド シムに「別れ」を経験させる

 ⇒別れる前に付き合っている必要があるので、願望コンプ目的なら「連続ロマンチスト」の8人同時交際から一気に別れるのが楽。

最高に幸せな家族 親になる

 ⇒年を取らない設定でも妊娠、出産は問題無く進む。サイエンスベビーや養子でもOK。

最高に幸せな家族 孫を4人持つ

 ⇒親になる同様、家系図に孫として存在していればOK。

ソウルメイト 一生の友達と結婚する

 ⇒友好度?親密度?を最大近くまで上げて「親友になる」で恋人とソウルメイトの関係(相手との関係マークがリング2つみたいなやるになればOK)になる。その状態で結婚すれば達成。※結婚してからソウルメイトになってもダメ。離婚してから再婚しても世帯に影響無いので間違った場合や初めから妻子ありスタートの場合も問題無し。

フリーランスの植物学者 植物3本を接ぎ木する

 ⇒「挿し木する」で枝を入手してから、別の植物に「接ぎ木する」でその枝を選択する。同じ植物から続けて挿し木するとその植物が終わるので注意。

フリーランスの植物学者 カウプラントを育てる

 ⇒釣りでカウプラントベリーを入手する。確率が低いので根気よく釣りをするが餌は不要。入手できたら四角いプランター(普通の植物と違って周りに広くスペースが必要。足りないと植えても植えても土から出てくる)に植える。成長したら水ではなくエサをあげないと死ぬ。なのでガーデナーが世話してくれないので注意 。

館長 クリスタルを5個集める

 ⇒クリスタルは岩を掘ることでたまに入手できる。盛り土になっている場所も、ゲーム再起動などでクリスタルの岩になったりする。24時間そのエリアに居ることで再出現するので、自エリアにクリスタルが掘れる可能性のある岩が出現したらラッキー。なお、願望セットした状態で入手しないとカウントされないので注意。他にも事前セット必須なものは様々あるので、基本的には願望のための行動は事前セットを推奨。一旦カウントされたら、途中で切り替えてもカウント分は残るので安心。

館長 元素を5個集める

 ⇒クリスタルなどを持ち物からクリックして地質調査に送ると、後日郵送で元素が届く。カウントの対象は送り主ではなく受け取った(郵便受けから受取るを行った)シムなので、世帯が複数人の時は要注意。

近所の相談役 シムに助言して、彼らの人生に影響を与える

 ⇒「ご近所の物語」の願望らしいが、老化オフ、ご近所の物語オフでも達成可能。知人からの電話(転職しようかとか、誰かにプロポーズしようか等)に行動を促す回答をすればカウントされる。※自分で考えさせるのはノーカウント。

RPGツクールMZ - その7

2023-09-29 | RPGツクールMZ,VXace,VX,2000,95,1~5

 「MOG_BattleHud」の表情パターンを増やしています。例えば睡眠の状態を追加。
_bhud_face_data = [0,0,0,1] ⇒これの要素2(左から3つ目)が現在の表情(つまり準備している画像の左から何番目か)を示しています。
「update_face_animation」に条件文を追加するだけで、簡単に表情を増やせます。※直接記載しないか、またはバックアップを取っておくことをお勧めします。
 ただし、優先順に条件が設定されていることに注意が必要です。例えば初めに戦闘不能かを判断しており、戦闘不能であればその後一切のアニメーションはスキップされます。これは、デフォルトでは戦闘不能アクターに攻撃等の行動を実行できないためです。記載方法が間違っていると、睡眠中に攻撃を受けると被ダメージの表情になったり、行動した時の表情が次の行動後まで残ったりします。
「updateFaceEffects」には呼吸エフェクトが適用されるかが設定されています。デフォルトでは待機(インデックス0)と被ダメ&瀕死(インデックス3)が呼吸在りになっています。そのほかの回復(インデックス1)等が設定されていないのは、アニメーションのフレーム数が消化されると待機の表情に戻る、一時的な表情であるからです。
「Game_Action」の「apply」も大事です。被ダメ、回復の際の表情設定がされています。自分は睡眠状態の時にダメージや回復で一瞬起きるのも変だなと思ったので、!target.isStateAffected(睡眠のステートID)等の条件で括りましたが、凝るなら睡眠中の被ダメ、睡眠中の回復みたいに更に表情を追加するのもありかなと思いました。
「prepare」に関しては行動時(インデックス2)が設定されています。ズームする時の表情です。これは変更するとしたら攻撃スキルの時はより攻撃的な表情だったり周りにオーラっぽい光をまとわせた画像を追加するのはどうでしょうか。試していませんがGameActionクラスなのでitem.isSkill().requiredWtypeId1 !== 0とかいけますかね。必要武器を設定しているから攻撃スキルみたいな作り方であれば。

 その他の案としては、フロントビュー限定になりますが最初から被ステートを取得しておいてoverlayをもとに分岐させるようにするのが良さそうだと思いました。これはサイドビュー用の設定項目なのでフロントビューであれば余っているはずで、且つデータベース上で10種類くらい設定可能なので利便性が高そうに思います。このパターンならデータベースを並び替えたり、追加/更新してもプラグインを書き換える必要がありません。
 なんかでもまぁ、色々出来るからこそ何処まで追求するのか、制作ってどんなものでも、沼となるか否かも自分次第ですよね。音楽にも通じますが、個人的には追及した結果から引き算で調整していける人はセンスあるなと思います。最初からスカスカなのとは全く話が違って、あくまで要素を潤沢に準備した上で客観視点で切り捨てていける。せっかく作ったのだから活かす方法を考えるかのも良いですが、何でもそうしていると大体ごちゃっとした自己満作品になりがちだなと。Necrocannibalistic Vomitriumなんてドラムボーカルとベースだけで20年も活動し続けてますし、余計なものを削ぎ落すって意味では必聴なのでは?


RPGツクールMZ - その6

2023-09-25 | RPGツクールMZ,VXace,VX,2000,95,1~5

 細々(ほそぼそ)と細々(こまごま)した改変(あらた かわり)を細(ぽそ)く長(おさ)く行(△□〇ー)っている。アクターコマンドの攻撃だけ、武器名称を表示させる都合上、長くしたかったので下画像のようにした。隠れたインデックス1(スタートの武器欄は0)を作成して、疑似的にコマンド数を調節している。インデックス1はダミーコマンドとして設定しつつも、テキストは空欄""、widthは0にした。また、インデックス0(武器欄)のみrect(矩形)を他インデックスの2倍に設定。


Window_ActorCommand.prototype.makeCommandList = function() {
    if (this._actor) {
        this.addAttackCommand(); 
        this.addDummyCommand();//これを追加
        this.addSkillCommands();
        this.addGuardCommand();
        this.addItemCommand();
    }
Window_ActorCommand.prototype.addDummyCommand = function() {
    this.addCommand("", "Dummy", "");//ハンドラはNUUNさまのCommandIconに対応するため設定。
};
Window_ActorCommand.prototype.itemRect = function(index) {
    const maxCols = this.maxCols();
 let itemWidth;//項目の幅をインデックス毎に設定。
 if(index === 0){
  itemWidth = this.itemWidth() * 2;
 }
 else if(index === 1){
  itemWidth = 0;
 }
 else{
  itemWidth = this.itemWidth();
 }
    //const itemWidth = index === 0 ? this.itemWidth() * 2 : this.itemWidth();
    const itemHeight = this.itemHeight();
    const colSpacing = this.colSpacing();
    const rowSpacing = this.rowSpacing();
    const col = index % maxCols;
    const row = Math.floor(index / maxCols);
    const x = col * itemWidth + colSpacing / 2 - this.scrollBaseX();
    const y = row * itemHeight + rowSpacing / 2 - this.scrollBaseY();
    const width = itemWidth - colSpacing;
    const height = itemHeight - rowSpacing;
    return new Rectangle(x, y, width, height);
};



 その後に必要となるのが、カーソルの設定になる。このままだと見た目には何も無いダミー項目にカーソルが移動するので、アクターコマンドのクラスにカーソル移動メソッドを定義して設定していく。

例えばWindow_ActorCommand.prototype.cursorDownに、次のような条件文を加えたりする。ちなみにカーソルに関するメソッドはWindow_Selectableクラスにある。
if(index === 0){
  this.smoothSelect(2);
 }

 結果的に想定通りの挙動が出来たので満足。ただ無理やりな方法なのでメンバー毎にコマンドが異なるゲームには使えない。あとはこの先、変なバグとか出ないことを祈るのみ。

 ところで画像から察しが付くと思うが、みんな大好きMoghunterBattleHudを利用している。コマンド位置の自動調整で、幅を大きくすると画面外にはみ出てしまうため、下記に手を加えてみた。同じような悩みを持って夜もおちおち眠れないし同年代と比較して圧倒的に禿げてきたという人は参考にされたし。「update Position S」のメソッドに条件文を追加するだけ。


this.yp = $gameTemp._bhud_position_active[1];//元々の処理
    if(this.xp + this.width < Graphics.width){//追加
     this.org[0] = $gameTemp._bhud_position_active[0] + Moghunter.bhud_com_x - this._fx;
    }
    else{
     this.org[0] = Graphics.width - this.width;
    }


RPGツクールMZ - その5

2023-09-16 | RPGツクールMZ,VXace,VX,2000,95,1~5

 わくわくするようなプラグイン素材の数々、ゼロから書けない自分にとっては宝石箱のようなもの。彦摩呂だってツクラーだったらそんなこと言いそう。トリアコンタンさまの「説明テンプレートプラグイン」を利用して、自分向けに利便性を高める改変を施した。 
 といっても、「function createDescription」の前後に配列と条件文を追加しただけ。スキルレベル的な問題が大きな壁としてうんにゃらかんにゃらでそれくらいの改変しか出来ない。


 
    const paramProps = ['mhp', 'mmp', 'atk', 'def', 'mat', 'mdf', 'agi', 'luk', 'hit', 'eva', 'cri', 'cev', 'mev', 'mrf', 'cnt' ];//既存に追加能力値の略称を追加
const paramNaming = ['HP', 'MP', '攻撃', '防御', '魔力', '魔防', '素早さ', '運', '命中', '回避', '会心', '会心回避', '魔法回避', '魔法反射', '反撃率'];//ネーミング用、色変更をプラグインパラメータ側で行うため。

//能力値取得のelese内にスイッチ分岐して、変化のある能力だけを説明欄に記載させる。
const paramIndex = paramProps.indexOf(propName);
    switch(paramProps[paramIndex]){
     case 'mhp':
     case 'mmp':
     case 'atk':
     case 'def':
     case 'mat':
     case 'mdf':
     case 'agi':
     case 'luk':
      if(data.params[paramIndex] > 0){
       return '+' + data.params[paramIndex] + ' ';
      }
      else if(data.params[paramIndex] < 0){
       return data.params[paramIndex] + ' ';//マイナス符号は勝手に付くらしい。
      }
      else{
       return '';//増減しない値は非表示。
      }
      break;
     case 'hit':
     case 'eva':
     case 'cri':
     case 'cev':
     case 'mev':
     case 'mrf':
     case 'cnt':
      const rate = data.traits.reduce((r, pm) => pm.code === 22 && pm.dataId === (paramIndex - 8) ? r + (pm.value * 100) : r, 0);
      if(rate > 0){
       return '+' + rate + '% ';
      }
      else if(rate < 0){
       return rate + '% '; 
      }
      else{
       return '';
      }
      break;
    }
    const nameIndex = paramNaming.indexOf(propName);
    switch(paramNaming[nameIndex]){
     case 'HP' :
     case 'MP' :
     case '攻撃' :
     case '防御' :
     case '魔力' :
     case '魔防' :
     case '素早さ' :
     case '運' :
      return data.params[nameIndex] !== 0 ? paramNaming[nameIndex] + ' ' : '';
      break;
     case '命中' :
     case '回避' :
     case '会心' :
     case '会心回避' :
     case '魔法回避' :
     case '魔法反射' :
     case '反撃率' :
      const rate = data.traits.reduce((r, pm) => pm.code === 22 && pm.dataId === (nameIndex - 8) ? r + (pm.value * 100) : r, 0);
      return rate !== 0 ? paramNaming[nameIndex] : '';
      break
    }
 

 そもそも装備品用の改変なので、スキルでは一切役に立たない。これを設定するあたり、プラグインパラメータの説明テンプレートは結構可読性が減少。
\C[23]【${wtypeId}】\C[3]${攻撃}\c[0]${atk}\C[3]${防御}\c[0]${def}\C[3]${魔力}\c[0]${mat}\C[3]${魔防}\c[0]${mdf}\C[3]${素早さ}\c[0]${agi}\C[3]${運}\c[0]${luk}\C[3]${HP}\c[0]${mhp}\C[3]${MP}\c[0]${mmp}\C[3]${命中}\c[0]${hit}${回避}\c[0]${eva}\C[3]${会心}\c[0]${cri}\C[3]${会心回避}\c[0]${cev}\C[3]${魔法回避}\c[0]${mev}\C[3]${魔法反射}\c[0]${mrf}\C[3]${反撃率}\c[0]${cnt}
${description}」
 けれど、能力変化の有無を勝手に判別して、無い場合には「攻撃」という項目自体も表示されなくなるので、ヘルプと実態の設定ミスが大きく減少するはず。日本の出生数くらい減少するはず。もっと言えば物価高騰に於いて所得据え置きの現状から相対的な収入減少を示唆している。
 
 こういう適当に設定したパラメータから、自動的に値0以外のものだけを取得する。
<style type="text/css"></style> <style type="text/css"></style>

RPGツクールMZ - その4

2023-09-10 | RPGツクールMZ,VXace,VX,2000,95,1~5

 やっとステータス画面が完成した。VXAceの時のようにdraw_guageが用意されていないので、水平線は諦めるしかないかと思ったが、BitmapクラスにgradientFillRectなるものがあったので事なきを得た。この画面はスキルリスト画面を参考に作成した。コマンドの選択肢にマウスカーソルを載せるだけで画面の中が書き換わる構成にした。初めは3画面準備して、show(),hide()で切り替える想定だったが、よくよくスキルリスト画面とスキル画面、対応するシーンをトレースしたところ、マウスオーバーで可能だと分かり方針転換した。update(秒間50~60程度だったろうか)の際にカーソル選択を監視すればいいらしい。

 属性とか沢山ある。何故多いのかと言うと、作る規模が分からないから、足りなくなるより先に準備しておく性分なので、使わなければカットするのは簡単。増やす事こそ難しい。表示スペースの問題も出てくるし、減らすほうが断然楽だと思うが、アイコンが足りないのは事実なので、配布されている素材を改変したり、それなりに作業は発生する。

 ステートも40種類くらい表示させているものの、効果未設定もあるので使うか分からない。そんなこともあるので、プラグインのパラメータに配列で格納しているから、後で不要になったものを削除してもパーツが上に、あるいは左に詰まっていくだけのはず。

 だがあと装備画面が手つかずの状態だと思うと気が滅入ることもあるが、いいプラグインがあれば頼ることにしたい。いいプラグインとは、自分のプロジェクトと競合しないものを指す。最悪競合しても、一から自作するのとトラブルシュートのどちらが楽かはよく考えて選択するつもりだ。


gradientFillRect (x, y, width, height, color1, color2, vertical)
 カラー1からカラー2にかけてグラデーションの矩形を作成してくれる。verticalは縦グラデーションの指定、その分描画パワーが必要になるはずなので今回は使っていない。

//----------------------------------------------------------------------------- // ColorManager
ColorManager.stLineColor1 = function() {
 return this.textColor(12);
};
ColorManager.stLineColor2 = function() {
 return this.textColor(14);
};
//-----------------------------------------------------------------------------

 カラーマネージャにグラデーション専用色を設定しておくと楽。カラーパレットは下記ファイルの右下にある32色を左上から右に向かって数える。
./img/system/window.png