Files
2026-02-02 04:50:13 +01:00

434 lines
8.0 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 3 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, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef ULTIMA4_CORE_DEBUGGER_H
#define ULTIMA4_CORE_DEBUGGER_H
#include "ultima/ultima4/core/coords.h"
#include "ultima/ultima4/core/types.h"
#include "ultima/ultima4/core/debugger_actions.h"
#include "gui/debugger.h"
namespace Ultima {
namespace Ultima4 {
/**
* Debugger base class
*/
class Debugger : public GUI::Debugger, public DebuggerActions {
private:
MapTile _horse, _ship, _balloon;
bool _dontEndTurn;
protected:
/**
* Returns true if the debugger is active
*/
bool isDebuggerActive() const override {
return isActive();
}
/**
* Process the given command line.
* Returns true if and only if argv[0] is a known command and was
* handled, false otherwise.
*/
bool handleCommand(int argc, const char **argv, bool &keepRunning) override;
/**
* Prints a message to the console if it's active, or to the
* game screen if not
*/
void print(const char *fmt, ...) override;
/**
* Prints a message to the console if it's active, or to the
* game screen if not, with no newline
*/
void printN(const char *fmt, ...) override;
/**
* Prompts for input, but only if debugger isn't running
*/
void prompt() override;
/**
* Gets the direction for an action
*/
Direction getDirection(int argc, const char **argv);
/**
* Used by methods so that when they're triggered by a keybinding
* action, stops the turn from being finished when they're done
*/
void dontEndTurn() {
_dontEndTurn = true;
}
private:
/**
* Move the avatar in a given direction
*/
bool cmdMove(int argc, const char **argv);
/**
* Attack
*/
bool cmdAttack(int argc, const char **argv);
/**
* Board transport
*/
bool cmdBoard(int argc, const char **argv);
/**
* Cast spell
*/
bool cmdCastSpell(int argc, const char **argv);
/**
* Climb
*/
bool cmdClimb(int argc, const char **argv);
/**
* Descend
*/
bool cmdDescend(int argc, const char **argv);
/**
* Enter location
*/
bool cmdEnter(int argc, const char **argv);
/**
* Exit
*/
bool cmdExit(int argc, const char **argv);
/**
* Fire
*/
bool cmdFire(int argc, const char **argv);
/**
* Get chest
*/
bool cmdGetChest(int argc, const char **argv);
/**
* Hole Up & Camp
*/
bool cmdCamp(int argc, const char **argv);
/**
* Ignite Torch
*/
bool cmdIgnite(int argc, const char **argv);
/**
* Generic interaction
*/
bool cmdInteract(int argc, const char **argv);
/**
* Jimmy lock
*/
bool cmdJimmy(int argc, const char **argv);
/**
* Locate position
*/
bool cmdLocate(int argc, const char **argv);
/**
* Mix reagents
*/
bool cmdMixReagents(int argc, const char **argv);
/**
* Exchanges the position of two players in the party. Prompts the
* user for the player numbers.
*/
bool cmdNewOrder(int argc, const char **argv);
/**
* Open door
*/
bool cmdOpenDoor(int argc, const char **argv);
/**
* Specifies a particular party number
*/
bool cmdParty(int argc, const char **argv);
/**
* Pass turn
*/
bool cmdPass(int argc, const char **argv);
/**
* Peer
*/
bool cmdPeer(int argc, const char **argv);
/**
* Save and quit
*/
bool cmdQuitAndSave(int argc, const char **argv);
/**
* Readies a weapon for a player. Prompts for the player and/or the
* weapon if not provided.
*/
bool cmdReadyWeapon(int argc, const char **argv);
/**
* Search
*/
bool cmdSearch(int argc, const char **argv);
/**
* Speed up, down, or normal
*/
bool cmdSpeed(int argc, const char **argv);
/**
* Combat speed up, down, or normal
*/
bool cmdCombatSpeed(int argc, const char **argv);
/**
* Show character stats
*/
bool cmdStats(int argc, const char **argv);
/**
* Talk
*/
bool cmdTalk(int argc, const char **argv);
/**
* Use
*/
bool cmdUse(int argc, const char **argv);
/**
* Changes a player's armor
*/
bool cmdWearArmor(int argc, const char **argv);
/**
* Yell
*/
bool cmdYell(int argc, const char **argv);
private:
/**
* Collision detection on/off
*/
bool cmd3d(int argc, const char **argv);
/**
* Teleports to the Abyss final altar
*/
bool cmdAbyss(int argc, const char **argv);
/**
* Collision detection on/off
*/
bool cmdCollisions(int argc, const char **argv);
/**
* Have all the companions join the party
*/
bool cmdCompanions(int argc, const char **argv);
/**
* Toggle whether combat occurs
*/
bool cmdCombat(int argc, const char **argv);
/**
* Destroy an object
*/
bool cmdDestroy(int argc, const char **argv);
/**
* Destroy all creatures
*/
bool cmdDestroyCreatures(int argc, const char **argv);
/**
* Jumps to a given dungeon
*/
bool cmdDungeon(int argc, const char **argv);
/**
* Flee from combat
*/
bool cmdFlee(int argc, const char **argv);
/**
* All equipement
*/
bool cmdEquipment(int argc, const char **argv);
/**
* Full stats
*/
bool cmdFullStats(int argc, const char **argv);
/**
* Toggle hunger on or off
*/
bool cmdHunger(int argc, const char **argv);
/**
* Moongate teleportation
*/
bool cmdGate(int argc, const char **argv);
/**
* Go to any specified location by name
*/
bool cmdGoto(int argc, const char **argv);
/**
* Help.. sends the party to Lord British
*/
bool cmdLorddBritish(int argc, const char **argv);
/**
* Grant karma
*/
bool cmdKarma(int argc, const char **argv);
/**
* Give all the items
*/
bool cmdItems(int argc, const char **argv);
/**
* Leave the current location
*/
bool cmdLeave(int argc, const char **argv);
/**
* Displays the current location
*/
bool cmdLocation(int argc, const char **argv);
/**
* Give all the mixtures
*/
bool cmdMixtures(int argc, const char **argv);
/**
* Moon phase
*/
bool cmdMoon(int argc, const char **argv);
/**
* Toggle opacity
*/
bool cmdOpacity(int argc, const char **argv);
/**
* Toggle overhead view
*/
bool cmdOverhead(int argc, const char **argv);
/**
* Give all the reagents
*/
bool cmdReagents(int argc, const char **argv);
/**
* Summons a creature to fight
*/
bool cmdSummon(int argc, const char **argv);
/**
* Returns the torch duration
*/
bool cmdTorch(int argc, const char **argv);
/**
* Creates a given transport
*/
bool cmdTransport(int argc, const char **argv);
/**
* Move up a floor
*/
bool cmdUp(int argc, const char **argv);
/**
* Move down a floor
*/
bool cmdDown(int argc, const char **argv);
/**
* Gives full virtue, or increments a specific virtue
*/
bool cmdVirtue(int argc, const char **argv);
/**
* Set wind direction or locks the direction
*/
bool cmdWind(int argc, const char **argv);
/**
* Lists the triggers in a dungeon room
*/
bool cmdListTriggers(int argc, const char **argv);
public:
bool _collisionOverride;
bool _disableHunger;
bool _disableCombat;
public:
Debugger();
~Debugger() override;
/**
* Gets a chest.
* If the default -2 is used, it bypasses prompting for a
* user. Otherwise, a non-negative player number is expected
*/
void getChest(int player = -2);
/**
* Executes the given command
*/
void executeCommand(const Common::String &cmd);
/**
* Executes the given command
*/
void executeCommand(int argc, const char **argv);
};
extern Debugger *g_debugger;
} // End of namespace Ultima4
} // End of namespace Ultima
#endif