賢人でもないのに、賢人特質(For Rentで追加されたシニア限定特質)が付いたふりをする雑記
圧力鍋でベジタブルチリを調理すると
A)ベジタブルチリ以外の料理(ベジタブルではないチリ、ビルマのサモサスープなど)の場合は、
- 出来上がった料理を食べるために、圧力鍋のパイメニューから「盛られた料理を取る」を選択する
- 圧力鍋から一人前が盛られた小皿オブジェクトがシムに渡される
- 受け取ったシムは、その小皿から料理を食べる
B)ベジタブルチリの場合は、
- 出来上がった料理を食べるために、圧力鍋の「盛られた料理を取る」を選択する
- 圧力鍋から8人前が入った大皿オブジェクトがシムに渡される
- シムの動作が止まる
- シムの頭上に、指示された場所に行けない時の吹き出しが出現する
- シムは、近くのカウンターかテーブル、床などに大皿を置く
置き去りにされた大皿をマウスオーバーすると、8人前のベジタブルチリが入っていると表示される
一方、圧力鍋の方は1回の調理で12人前が作られるから、1人前を渡したつもりになっている
傷むまでの時間も圧力鍋と大皿で異なっている
圧力鍋をクリックして「全部を取る」を選択すると、正しい大皿オブジェクトが生成される(この場合は11人前が入った大皿が生成され、圧力鍋は空になる)
この大皿をクリックして「盛られた料理を取る」を選択すると一人前の小皿が生成され、エラーは起きない
圧力鍋の「盛られた料理を取る」動作で生成された大皿を左クリックして、パイメニューから「盛られた料理を取る」を選択すると、LastExceptionが発生し、大皿オブジェクトが1つ複製される(以下、誤った大皿オブジェクトと呼ぶ)
誤った大皿オブジェクトで「1人前を取る」を選択時すると、LastExceptionは出ないが、誤った大皿オブジェクトが1つ複製される
正しい大皿、誤った大皿とも「片付ける」を選択すると、シムは大皿を持ってゴミ箱に捨てに行く
正しい大皿、誤った大皿とも「しまう」を選択すると、シムは大皿を冷蔵庫に入れる
正しい大皿、誤った大皿とも「所持品に入れる」を選択すると、シムは大皿を自身の所持品に入れる
もし圧力鍋で作るすべての料理で同じエラーが発生するのであれば圧力鍋を現行犯逮捕するだろう
誤認逮捕だったとしても、別件で問題を起こしていただけに疑われて当然だ
もし、ベジタブルチリをコンロで調理しても同じエラーが出るならば、ベジタブルチリの料理オブジェクトが容疑者だ
しかし、コンロで一人前、ファミリーサイズ(4人前)、パーティサイズ(8人前)のベジタブルチリを調理したが、エラーは出なかった
圧力鍋にあってコンロにはない「全部を取る」動作で生成された大皿オブジェクトは正しく動作している
誤った大皿オブジェクトが生成されるのは、圧力鍋調理時とコンロ調理時に共通する動作「盛られた料理を取る」か「1人前を取る」時だが、コンロ調理時は正しい大皿オブジェクトが生成されている
チリ関係の料理はチリ、ベジタブルチリの2種類がある。両者がクラス定義でどういう参照関係を持っているかわからないが、「ベジタブルチリはベジタリアン特質を持つシムが食べても不幸にならないチリ」という関係があることは想像できる
Home Chef Hustleを持っていないので、そちらの屋台やコンロで調理した場合は分からないが、
現時点での原因仮説は「実行犯は圧力鍋だが、ベジタブルチリかチリが共犯者の可能性」「圧力鍋の単独犯でハードコーディングまたは関係クラス丸ごとコピーの可能性」のいずれか
LastExceptionを見てみると
スタックの最後で、ごめんなさいと泣きながらExceptionを出しているのは大抵被害者だ
Exceptionを出したオブジェクトは「盛られた料理を取る」ように指示されたシム
Exceptionを出した処理は、皿を持って食べる動作を行うために呼び出されたアニメーション処理(carry_postures.py)
シムは「左手で皿を持ったところ、食べられない物(object_Food_BowlFork_Multi)だったので、ビックリしてそれを手放しました(posture_CarryNothing)」と言っている
その手前で、第一容疑者とされるのが、シムが手にしたベジタブルチリの大皿(object_Food_BowlFork_Multi)だが、LastExceptionには静的オブジェクトとしてしか登場しない
従って、このオブジェクト自体は「僕は何も悪いことしてません」と言っていると解釈される
更にその前の圧力鍋は「料理を出せと言われた(pressureCooker_GrabServing)ので、大皿を出しました(object_Food_BowlFork_Multi)」と言っている。
LastExceptionで分かるのはここまで
単純に見れば、圧力鍋が真犯人だ
「またお前か」と取調室で言われるだろう
が、なぜベジタブルチリだけで起きるのか?
また、圧力鍋は12人前を作り、鍋からは1人前ずつ取り出すはずだが、コンロでパーティサイズを調理した際に使われるはずの8人前大皿オブジェクトが生成されるのは、どこで間違った指示が出されたのか?
残念ながら内部のソースコードを読むことはできないので、想像はここまでだ
ゲームのこの程度の不具合は、ビジネスアプリケーションのような深刻さがないだけに、不具合自体も楽しめる?
と不謹慎なことを思う今日この頃
対策は「ベジタブルチリの大皿を見かけたら、シムに片付けるの指示を出す」だが、シムが嫌そうにしているので、大皿を右クリックし、表示されるチートメニューから「オブジェクトを破壊する(デバッグ)」で消している
そういえば
昔インドの会社に発注したシステムで重大障害を出し、一日も早く修正プログラムをリリースしたかったので、現地に乗り込んだことがある
修正プログラムの開発チームは全員インド人
会議を開けば、インド人同士でお前は信用できないと殴り合わんばかりに怒鳴り合い
命名規約や定義書など存在せず、重複や矛盾が見つかると掴み合いのケンカが勃発
コードレビューは開発者の人格否定レビューだった
「そんな悪口の言い方あったのか」という勉強にはなったが
これらの積み重ねで、修正プログラムも不具合の沼に堕ち
後日、この会社を取引停止にしたら逆ギレされた
という余計なことを思い出した(怒り+1)