町をつくる
今回は新しい町のマップを追加します。新しいマップを追加するためにはスクリプトを書き換える必要はないです。マップエディタでtown.mapを作る、イベントファイルtown.evtを作る、field.evtに町へ移動する移動イベントを配置するだけです。それとは別に町の中でカウンター越しにキャラクターと会話できるようにしました。
フィールドから町への移動
左のスクリーンショットにあるようにフィールドに町を配置したいのでfield.evtに移動イベントを追加します。
MOVE,7,8,28,town,1,13
これは、フィールドの (7,8) にマップチップIDが28番(町の絵)を配置し、town.mapの (1,13)に移動するという意味です。マップファイルtown.mapはマップエディタで作成しておきます。また、イベントファイルtown.evtも作成しておきます。town.evtはここで載せてしまうとつまらなくなるのでファイルをのぞいて見てください。
カウンター越しの会話
お店のキャラクターとカウンター越しに話せるようにします。改造するのはPlayerのtalk()です。
def talk(self, map): """キャラクターが向いている方向のとなりにキャラクターがいるか調べる""" # 向いている方向のとなりの座標を求める nextx, nexty = self.x, self.y if self.direction == DOWN: nexty = self.y + 1 event = map.get_event(nextx, nexty) if isinstance(event, Object) and event.mapchip == 41: nexty += 1 # テーブルがあったらさらに隣 elif self.direction == LEFT: nextx = self.x - 1 event = map.get_event(nextx, nexty) if isinstance(event, Object) and event.mapchip == 41: nextx -= 1 elif self.direction == RIGHT: nextx = self.x + 1 event = map.get_event(nextx, nexty) if isinstance(event, Object) and event.mapchip == 41: nextx += 1 elif self.direction == UP: nexty = self.y - 1 event = map.get_event(nextx, nexty) if isinstance(event, Object) and event.mapchip == 41: nexty -= 1 # その方向にキャラクターがいるか? chara = map.get_chara(nextx, nexty) # キャラクターがいればプレイヤーの方向へ向ける if chara != None: if self.direction == DOWN: chara.direction = UP elif self.direction == LEFT: chara.direction = RIGHT elif self.direction == RIGHT: chara.direction = LEFT elif self.direction == UP: chara.direction = DOWN chara.update(map) # 向きを変えたので更新 return chara
となりの座標にあるイベントのマップチップIDが41番(机)のときさらにとなりの座標にキャラクターがいるか調べています。机は以前実装した一般オブジェクト(2008/7/20)です。こうすれば、カウンター越しにいるキャラクターと会話できます。
これで町ができましたね!