scummvm/engines/saga2/magic.h
2021-07-12 17:11:37 +02:00

110 lines
3.8 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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
* aint32 with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*
* Based on the original sources
* Faery Tale II -- The Halls of the Dead
* (c) 1993-1996 The Wyrmkeep Entertainment Co.
*/
#ifndef SAGA2_MAGIC_H
#define SAGA2_MAGIC_H
#include "saga2/spells.h"
namespace Saga2 {
class ActiveItem;
class Location;
class SkillProto;
class GameObject;
// ------------------------------------------------------------------
// This is an include file for the spellcasting interface. This file
// is meant to publish the main API functions for spell casting.
// The internal workings of the spell stuff is defined elsewhere:
// SPELLS.H has spell ID numbers
// EFFECTS.H what spells are capable of doing to things
// SPELSHOW.H is the portion of the interface needed by DISPNODE
// SPELLBUK.H defines the global spell list
//
// ------------------------------------------------------------------
// Prototypes for spell / skill use
// see if the mouse pointer is pointing at a viable target for a
// selected spell
bool validTarget(GameObject *enactor,
GameObject *target,
ActiveItem *tag,
SkillProto *skill);
// test for untargeted skill / spell that gets cast immediately
bool nonTargeted(SkillProto *spell);
// test for skill / spell that cannot be used
bool nonUsable(SkillProto *spell);
// This call looks up a spells object prototype. It can accept either
// an object ID or a spell ID
SkillProto *skillProtoFromID(int16 spellOrObjectID);
// Initialization call to map the Spell Object prototypes
// into the main spell database
void initializeSkill(SkillProto *oNo, SpellID sNo);
//
// Cast: This call makes the actor do his spell casting dance. The
// motion task calls the implement routine at the appropriate
// time. If the caster is not an actor the implement routine is
// chained directly.
//
// Implement: This call actually causes the spell to 'fire'. The
// display effect is started, and the internal effects are
// implemented.
//
// check for available mana
bool canCast(GameObject *enactor, SkillProto *spell);
// cast untargeted spell
bool castUntargetedSpell(GameObject *enactor, SkillProto *spell);
// global cast spell routines at assorted targets
bool castSpell(GameObject *enactor, Location &target, SkillProto *spell);
bool castSpell(GameObject *enactor, ActiveItem *target, SkillProto *spell);
bool castSpell(GameObject *enactor, GameObject *target, SkillProto *spell);
// global cast spell routines at assorted targets
bool implementSpell(GameObject *enactor, Location &target, SkillProto *spell);
bool implementSpell(GameObject *enactor, ActiveItem *target, SkillProto *spell);
bool implementSpell(GameObject *enactor, GameObject *target, SkillProto *spell);
// spell saving & loading
void initSpellState(void);
void saveSpellState(Common::OutSaveFile *out);
void loadSpellState(Common::InSaveFile *in);
void cleanupSpellState(void);
} // end of namespace Saga2
#endif