1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
/*
* monsters.h - Monsters.
*
* Copyright (C) 2000-2001 The Exult Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef INCL_MONSTERS
#define INCL_MONSTERS 1
#include "actors.h"
/*
* Monsters get their own class because they have a bigger footprint
* than humans.
*/
class Monster_actor : public Npc_actor
{
static Monster_actor *in_world; // All monsters in the world.
// Links for 'in_world' list.
Monster_actor *next_monster, *prev_monster;
Animator *animator; // For wounded men.
void link_in(); // Add to in_world list.
void link_out(); // Remove from list.
public:
Monster_actor(const std::string &nm, int shapenum, int num = -1,
int uc = -1);
virtual ~Monster_actor();
// Create an instance.
static Monster_actor *create(int shnum);
static Monster_actor *create(int shnum, Tile_coord pos,
int sched = -1, int align = (int) Actor::neutral,
bool tempoary = true, bool equipment = true);
// Methods to retrieve them all:
static Monster_actor *get_first_in_world()
{ return in_world; }
Monster_actor *get_next_in_world()
{ return next_monster; }
static void delete_all(); // Delete all monsters.
static void give_up() // For file errors only!
{ in_world = 0; }
virtual int move_aside(Actor* for_actor, int dir)
{ return 0; } // Monsters don't move aside.
// Render.
virtual void paint();
// Step onto an (adjacent) tile.
virtual int step(Tile_coord t, int frame);
// Remove/delete this object.
virtual void remove_this(int nodel = 0);
// Move to new abs. location.
virtual void move(int newtx, int newty, int newlift);
// Add an object.
virtual bool add(Game_object *obj, bool dont_check = false,
bool combine = false);
virtual int get_armor_points(); // Get total armor value.
// Get total weapon value.
virtual Weapon_info *get_weapon(int& points, int& shape);
virtual int is_monster()
{ return 1; }
virtual void die(Actor *attacker); // We're dead.
void write(DataSource* nfile);// Write out (to 'monsnpc.dat').
};
#endif
|