Daydreaming in Brookline, MA

DL-9; 宿と病院、戦闘での魔法

1 はじめに

Rogue+Wizライクなゲーム(仮称Daemon Lord)を作るプロジェクトの9回目です。

githubでコードを 公開 しています。MacとLinuxで動作確認していますが、Windowsは未対応です。

2 宿と病院

前々回に予告した宿をようやく実装しました。宿は宿泊することでレベルアップします。このレベルアップ判定と処理が思いのほか複雑で、実装に結構苦労しました。'ず'さんの 解析ページ にすっかりお世話になりました。

宿屋に泊まるとHPとMPが回復し、レベルアップチェックを行います。次のレベルに十分な経験値を得ていればレベルアップしてHPが増え、クラスによって魔法を覚えていきます。年齢の関係する特性値の変化を除いて、ほぼApple版Wizardryの実装そのままになっていると思います。

一人ずつちまちま宿泊するのは面倒なので、より普通に、パーティー全員で宿泊するよう変えています。年齢を無視したことで、存分に高級な部屋に宿泊できるようになりました 笑。

|   v)lake view suites   1200 gold                           |        
|   p)residential suites 3000 gold                           |        
|   or l)eave                                                |        
|   Which rooms to stay today? > p                           |        
| * Today's dinner is supreme course w/ champagne.           |        
| * Alex went to bed...                                      |        
| * Level up!                                                |        
| * Gained strength by 2 points.                             |        
|   Gained i.q. by 1 points.                                 |        
|   Gained vitality by 1 points.                             |        
|   Lost agility by 1 points.                                |        
|   Lost luck by 1 points.                                   |        
|   Your hp increased by 25 points.                          |        

これはレベルアップしたところです。複数レベルまとめてアップするのでstrは+2しています。

病院は寺院(temple of cant)の代わりですが、やっていることは一緒です。麻痺以上の状態で迷宮から出てくると、救急車がやってきて病院に運ばれます(演出は無し)。死亡や灰からの復活も可能です。しかし灰ってすごいですよね。。。

3 戦闘

殴り合いだけでは地味なので、魔法をいくつか実装しました。katino相当で眠らせて倍打攻撃もできます。halito/mahalito/lahalito/dalto/madalto/malikto/tiltowait相当は全て同じメソッドで実現しています。

 daemon lord - dl - [battle] floor: 1 (5/8) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^|   1) 4 men in uniform           (4)    |^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^|                                        |^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^|                                        |^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^|                                        |^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^| * What spell to cast?                  |^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^| > taika                                |^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^| * hit any key or t)ake back >          |^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^| * Fast casted taika.                   |^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^|   man in uniform incurred 15 damage.   |^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^|   man in uniform is killed.            |^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^|   man in uniform incurred 13 damage.   |^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^|   man in uniform is killed.            |^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^|   man in uniform incurred 8 damage.    |^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^|   man in uniform incurred 19 damage.   |^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^|   man in uniform is killed.            |^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^| * Cal parried.                         |^^^^^^^^^^^^^^^^^^^^^^^^
 # name       class  ac   hp status       * south                               
 1 Alex       G-FIG   2   38 parry        * east                                
 2 Betty      G-FIG   3   15 parry          Which direction? - ;)leave > l      
 3 Cal        G-SAM   4   16 parry        * Unlocked.                           
 4 Debora     N-THI  10   11 parry        * east                                
 5 Emily      G-PRI  10   24 parry        * east                                
 6 Fast       G-MAG  10   33 taika        * *** encounter *** 

mahalito相当を唱えてモンスターを蹴散らしたところです。Macのターミナルの仕様のせいか、1画面コピペするのに、3回に分けないとうまくいきません。ひどい仕様です。

これまでのところ実装したのは全てパーティーメンバーが使う、攻撃、HP回復、AC上下、ステータス攻撃(katino, monitino等)です。また、自分たちの位置を表示するdumapic相当、モンスターを識別するlatumapic相当、パーティー全体のACを迷宮にいる間-2するmaporfic相当も実装しています。よくお世話になるmadi相当も入れました。

ここでも色々なバグが出ました。敵のグループをPythonのリストで管理しているのですが、for文で回しているのに死亡した敵を都度リストから抜いていて不思議な現象が起きたり、死んだはずの敵が攻撃してきたり、ここに来て基本関数であるダイスの計算が間違っていることに気がついたり、、、。

ちなみにPythonのリストをiterateしながら中身を抜きたいような場合は、いったんリストをコピーしてコピーしたリストをiterateしながら、オリジナルから抜いていくようにするとよいようです。最近読んだPython本にも書いてあった気がします。

4 セーブとロード

いちおうセーブとロードも実装しました。セーブ(&終了)はEdge of townと迷宮でのキャンプ中にすることができます。ロードはセーブしたところからの再開で、Edge of townでのみすることができます。Edge of townで再開の操作をしても、迷宮でセーブした場合には迷宮のセーブ位置からの再開になります。

Pythonのpickleがどこまでクラスオブジェクトを保存してくれるのかいまひとつわからず、セーブとロードにはかなり試行錯誤しました。

セーブデータには多分まだ手が入るので、今セーブしたデータは無駄になってしまう可能性が高いです。

5 次は、、

そろそろ宝箱の実装でしょうか。魔法の実装もたくさん残っています。一通りシステムが完成して、初めてシナリオと、オリジナルのモンスターやアイテムデータを考えることになりそうです。