前回の続きです。たぶんこっちがメインコンテンツ。
前回の記事はこちらから。
denkigroup.hatenablog.com
「初代たまごっちを再現する」と大見得を切って製作を始めたわけですが、どのような代物ができあがったのか、今回の記事ではPICたまごっちの"ゲームとしての仕様"を紹介します。
先に言ってしまいますが、100%の再現は無理でした。まあ、当然っちゃ当然ですが。
そもそも、本家にはどんな機能があったっけ?
ややうろ覚えなところもありますが、おおかた以下のような機能があったと思います。
- ステータス … 年齢、体重。おなか、ごきげんがそれぞれ0-4の5段階。しつけメーター。あとは忘れた
- 給餌 … ご飯をあげるとおなかが1回復、おやつをあげるとごきげんが1回復。おやつを食べすぎると病気になりやすい?
- ごきげんアップゲーム … たまごっちと遊ぶ。勝つとごきげん1回復。「こっち向いてホイ」と「数字でドン」
- 排泄・トイレ … ウンチを放置すると病気になりやすい?
- しつけ・叱る … ご飯を食べなくなったりしたら叱る。しつけメーターがアップ。
- 病気・注射 … 病気になったら治療してあげないといけない。
- 就寝・消灯 … 各キャラによって寝る時間が決まっていて、就寝時は消灯してあげる必要がある
- ブザー … お世話してほしいときに鳴る。その他効果音として様々な場面で鳴る。
- 進化 … ベビーっちからアダルトっちまで4段階で進化する。途中で分岐あり。
技術的に大変だったり、今回の回路構成に合わないような機能の再現は諦めています。逆に回路構成上必要な機能を足したり、内部パラメータの計算など公開されていないが本家にあると思われる機能についても適当に設計して足しています。
PICたまごっちの機能仕様
モード遷移図
本家と大きく違うのは、「メニュー画面 (Menu)」が存在することです。本家は以下画像のようにLCDの上下部にメニューアイコンがありますが、当然OLEDモジュールにはありません。そこで、どのお世話をするかを選ぶメニュー画面を新設して対応しました。
各お世話のアイコンについては、8×8のドット絵を自作しました。左上から、給餌、ごきげんアップゲーム、トイレ、ステータス確認、注射、休止モードです。
ステータス (Status)
ステータスは下記があります。
- 年齢 … 1-29としました。一定時間ごとに1ずつ進みます。
- 体重 … 10-290の10g単位としました。何か食べると増え、ごきげんアップゲームで遊んだり、空腹で放置したりすると減ります。
- おなか、ごきげん … 本家と同じ0-4の5段階です。給餌やごきげんアップゲームで増え、一定時間経過で1ずつ減ります。
- 健康度(隠しパラメータ) … 独自設計のパラメータで、寿命や進化分岐に影響します。0-255の範囲の数値で、初期値は128です。おやつを食べる、ウンチを放置するなどの行動で少しずつ減り、ごきげんアップゲーム実施で少しずつ増えます。
後で述べますが「叱る」機能はないので、本家にあったしつけメーターは実装していません。
給餌 (Feed)
「ごはん」か「おやつ」を選び、与えます。ごはんは「おなか」を1回復し、おやつは「ごきげん」を、1回復します。両方とも、体重が増えます。また、おやつは健康度を低下させます。
体重や健康度の操作以外は、アニメーションも含め本家にだいぶ近く作れた機能です。
ごきげんアップゲーム (Play)
「数字でドン」で遊びます。新種発見たまごっちを知らない方のために補足すると、次に出る数字が、お題の数字より大きいか小さいかを当てるゲームです。
5回行って3回以上正解すると成功で、成功時は「ごきげん」が1回復します。また、成功か失敗かに関わらず、健康度を上昇させます。
数字は1から8まで出現します。ゲーム開始時に適当な方法で乱数を10個生成し、お題と回答として使っています。
本家は数字が1から9までですが、それ以外はほぼ同じです。
トイレ (Wash)
まずウンチですが、ウンチタイマーという変数を用意し、定期的にデクリメント、0になったら排泄を行う、という制御にしています。食事をするとウンチタイマーを一定量デクリメントし、食事しなかった場合より早く排泄するようにしています。
ウンチは画面に表示するのは最大4個までですが、内部的には5個以上溜まります。ウンチを放置したまま次の排泄を迎えると、放置ウンチ数に比例して健康度が低下します。
注射 (Cure)
病気になった状態を回復します。病気のまま放置すると健康度が低下するようにしています。一定時間ごとに確率で病気になるようにしています。
進化
ベビーっちからアダルトっちまで4段階で進化します。本家は3段階目で2分岐し、4段階目は6分岐しますが、キャラ数が増えればそれだけドット絵の数が増えてしまい大変だったので、自作たまごっちでは最後の4段階目のみ2分岐するようにしました。ですので合計5キャラが実装されています。
4段階目の分岐進化は、健康度で分岐します。
本家にないが自作たまごっちにある機能「低消費モード」
本家はおそらく非常に低消費のディスプレイを使用しているため、常に電源はつきっぱなしです。しかしPICマイコンもOLEDモジュールも、アクティブ状態の消費電流は馬鹿になりませんので、低消費モードが必要になります。
そこで下記2種の低消費モードを実装しています。2つともOLEDとPICマイコンをスリープさせるのは同じですが「たまごっちの時間が進むか止まるか」が異なります。
- スリープモード (Sleep)
スタンバイモードの時に約3分ほどの無操作で、OLEDとPICマイコンの両方をスリープ状態にします。いずれかのスイッチを押すとウェイクアップしてスタンバイモードに復帰します。また、PICのTIMER1により16秒ごとに500msだけウェイクアップし、各パラメータの更新を行います。つまり、スリープモードになっていてもおなかは減るし、成長もするということであり「たまごっちの時間は止まっていない」モードです。
- 休止モード (Stop)
メニュー画面の休止アイコンにより、休止モードに入ることができます。このモードではスリープモード同様、OLEDとPICマイコンの両方をスリープ状態にし、消費電力を削減します。いずれかのスイッチを押すとウェイクアップしてスタンバイモードに復帰します。スリープモードと異なる点として、TIMER1による定期ウェイクアップを行わないため休止モードに入った時点のステータスを維持します。つまり「たまごっちの時間も止まる」モードです。
たとえば夜寝るときや出かけるときなど、長いこと触らないときに使うことを想定したモードです。
本家にあったが自作たまごっちにない機能
- 「時計機能」
リアルタイムクロックを搭載していないため、時計機能はありません。
- 「しつけ・叱る」
単純に面倒だったため実装していません…^^;
- 「就寝・消灯」
時計機能がないことと、前述「休止モード」の存在により不要と思われるため、実装しませんでした。
- 「ブザー」
これは実装してもよかったのですが、OLEDの制御とブザーの制御を両立させるのが技術力不足で難しいと感じたため、断念しました。
最後に
ここまで読んでいただきありがとうございます。長々と書きましたが、やはりソフトウェアの実装は大変でした。PIC16F1705の8Kワードフラッシュを80%ほど消費しており、今まで趣味で作ったものの中では一番のコード量となりました。
結論、わりとそれっぽいものはできるけど、完全再現は難しい。 本家の初代たまごっちではキャラごとにお腹の空きやすさなどの特徴が異なっていたりして、さらに隠しキャラもいるなど、機能が盛りだくさんです。今回の自作たまごっちとは比較にならないほど複雑なソフトウェアになっていることでしょう。
なお材料費はだいたい1000円前後で、本家の販売価格より安く作れたのは個人的に満足した点です。