/* 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/>.
 *
 */

/*
 * This code is based on the original source code of Lord Avalot d'Argent version 1.3.
 * Copyright (c) 1994-1995 Mike, Mark and Thomas Thurman.
 */

#ifndef AVALANCHE_ENUMS_H
#define AVALANCHE_ENUMS_H

namespace Avalanche {

enum MonsterType { kMonsterTypeGhost, kMonsterTypeGlerk };

enum Flavour { kFlavourEga, kFlavourBgi, kFlavourNatural, kFlavourTwo, kFlavourOne };

enum Color {
	kColorBlack = 0,       kColorBlue,      kColorGreen,     kColorCyan,         kColorRed,
	kColorMagenta = 5,     kColorBrown,     kColorLightgray, kColorDarkgray,     kColorLightblue,
	kColorLightgreen = 10, kColorLightcyan, kColorLightred,  kColorLightmagenta, kColorYellow,
	kColorWhite = 15
};

// CHECKME: kRoomBossKey is a guess
enum Room {
	kRoomNowhere = 0,       kRoomYours = 1,        kRoomOutsideYours = 2,          kRoomOutsideSpludwicks = 3,
	kRoomYourHall = 5,      kRoomMusicRoom = 7,    kRoomOutsideArgentPub = 9,      kRoomArgentRoad = 10,
	kRoomWiseWomans = 11,   kRoomSpludwicks = 12,  kRoomInsideAbbey = 13,          kRoomOutsideAbbey = 14,
	kRoomAvvysGarden = 15,  kRoomAylesOffice = 16, kRoomArgentPub = 19,            kRoomBrummieRoad = 20,
	kRoomBridge = 21,       kRoomLusties = 22,     kRoomLustiesRoom = 23,          kRoomWestHall = 25,
	kRoomEastHall = 26,     kRoomOubliette = 27,   kRoomGeidas = 28,               kRoomCatacombs = 29,
	kRoomEntranceHall = 40, kRoomRobins = 42,      kRoomOutsideNottsPub = 46,      kRoomNottsPub = 47,
	kRoomOutsideDucks = 50, kRoomDucks = 51,       kRoomOutsideCardiffCastle = 70, kRoomInsideCardiffCastle = 71,
	kRoomBossKey = 98,      kRoomMap = 99,         kRoomDummy = 177 // Dummy room
};

// Objects you can hold:
enum Object {
	kObjectWine = 1, kObjectMoney,    kObjectBodkin,       kObjectPotion, kObjectChastity,
	kObjectBolt,     kObjectCrossbow, kObjectLute,         kObjectBadge,  kObjectMushroom,
	kObjectKey,      kObjectBell,     kObjectPrescription, kObjectPen,    kObjectInk,
	kObjectClothes,  kObjectHabit,    kObjectOnion,        kObjectDummy = 177
};

// People who hang around this game.
enum People {
	// Boys:
	kPeopleAvalot = 150,     kPeopleSpludwick = 151, kPeopleCrapulus = 152,  kPeopleDrDuck = 153,
	kPeopleMalagauche = 154, kPeopleFriarTuck = 155, kPeopleRobinHood = 156, kPeopleCwytalot = 157,
	kPeopleDuLustie = 158,   kPeopleDuke = 159,      kPeopleDogfood = 160,   kPeopleTrader = 161,
	kPeopleIbythneth = 162,  kPeopleAyles = 163,     kPeoplePort = 164,      kPeopleSpurge = 165,
	kPeopleJacques = 166,
	// Girls:
	kPeopleArkata = 175,     kPeopleGeida = 176,     kPeopleInvisible = 177, kPeopleWisewoman = 178,
	//
	kPeoplePardon = 254,     kPeopleNone = 0
};

enum VerbCode {
	kVerbCodeExam = 1,     kVerbCodeOpen = 2,    kVerbCodePause = 3,   kVerbCodeGet = 4,       kVerbCodeDrop = 5,
	kVerbCodeInv = 6,      kVerbCodeTalk = 7,    kVerbCodeGive = 8,    kVerbCodeDrink = 9,     kVerbCodeLoad = 10,
	kVerbCodeSave = 11,    kVerbCodePay = 12,    kVerbCodeLook = 13,   kVerbCodeBreak = 14,    kVerbCodeQuit = 15,
	kVerbCodeSit = 16,     kVerbCodeStand = 17,  kVerbCodeGo = 18,     kVerbCodeInfo = 19,     kVerbCodeUndress = 20,
	kVerbCodeWear = 21,    kVerbCodePlay = 22,   kVerbCodeRing = 23,   kVerbCodeHelp = 24,     kVerbCodeLarrypass = 25,
	kVerbCodePhaon = 26,   kVerbCodeBoss = 27,   kVerbCodePee = 28,    kVerbCodeCheat = 29,    kVerbCodeMagic = 30,
	kVerbCodeRestart = 31, kVerbCodeEat = 32,    kVerbCodeListen = 33, kVerbCodeBuy = 34,      kVerbCodeAttack = 35,
	kVerbCodePasswd = 36,  kVerbCodeDir = 37,    kVerbCodeDie = 38,    kVerbCodeScore = 39,    kVerbCodePut = 40,
	kVerbCodeKiss = 41,    kVerbCodeClimb = 42,  kVerbCodeJump = 43,   kVerbCodeHiscores = 44, kVerbCodeWake = 45,
	kVerbCodeHello = 46,   kVerbCodeThanks = 47,
	kVerbCodeSmartAlec = 249, kVerbCodeExpletive = 253, kVerbCodePardon = 254
};

enum MouseCursor {
	kCurUpArrow = 0,   kCurScrewDriver = 1, kCurRightArrow = 2, kCurFletch = 3, kCurWait = 4, kCurHand = 5,
	kCurCrosshair = 6, kCurIBeam = 7, kCurHelp = 8
};

// Magic/portal constants:
enum Magics {
	kMagicNothing, // Ignore it if this line is touched.
	kMagicBounce, // Bounce off this line. Not valid for portals.
	kMagicExclaim, // Put up a chain of scrolls.
	kMagicTransport, // Enter new room.
	kMagicUnfinished, // Unfinished connection.
	kMagicSpecial, // Special function.
	kMagicOpenDoor // Opening door.
};

// Constants to replace the command characters from Pascal.
// For more information, see: https://github.com/marnanel/avalot/wiki/Scrolldrivers
enum ControlCharacter {
	kControlSpeechBubble = 2, // ^B
	kControlCenter = 3, // ^C
	kControlToBuffer = 4, // ^D
	kControlItalic = 6, // ^F
	kControlBell = 7, // ^G
	kControlBackspace = 8, // ^H
	kControlInsertSpaces = 9, // ^I
	kControlLeftJustified = 12, // ^L
	kControlNewLine = 13, // ^M
	kControlParagraph = 16, // ^P
	kControlQuestion = 17, // ^Q
	kControlRoman = 18, // ^R
	kControlRegister = 19, // ^S
	kControlNegative = 21, // ^U
	kControlIcon = 22 // ^V
};

static const int16 kScreenWidth = 640;
static const int16 kScreenHeight = 200;

static const int16 kWalk = 3;
static const int16 kRun = 5;

} // End of namespace Avalanche

#endif // AVALANCHE_ENUMS_H
