scummvm/engines/avalanche/timer.h

181 lines
4.5 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
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
/*
* 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.
*/
/* Original name: TIMEOUT The scheduling unit. */
#ifndef AVALANCHE_TIMER_H
#define AVALANCHE_TIMER_H
#include "common/scummsys.h"
namespace Avalanche {
class AvalancheEngine;
class Timer {
public:
// Reason runs between 1 and 28.
enum Reason {
kReasonDrawbridgeFalls = 2,
kReasonAvariciusTalks = 3,
kReasonGoToToilet = 4,
kReasonExplosion = 5,
kReasonBrummieStairs = 6,
kReasonCardiffsurvey = 7,
kReasonCwytalotInHerts = 8,
kReasonGettingTiedUp = 9,
kReasonHangingAround = 10, // Tied to the tree in Nottingham.
kReasonJacquesWakingUp = 11,
kReasonNaughtyDuke = 12,
kReasonJumping = 13,
kReasonSequencer = 14,
kReasonCrapulusSaysSpludwickOut = 15,
kReasonDawndelay = 16,
kReasonDrinks = 17,
kReasonDuLustieTalks = 18,
kReasonFallingDownOubliette = 19,
kReasonMeetingAvaroid = 20,
kReasonRisingUpOubliette = 21,
kReasonRobinHoodAndGeida = 22,
kReasonSittingDown = 23,
kReasonGhostRoomPhew = 1,
kReasonArkataShouts = 24,
kReasonWinning = 25,
kReasonFallingOver = 26,
kReasonSpludwickWalk = 27,
kReasonGeidaSings = 28
};
// Proc runs between 1 and 41.
enum Proc {
kProcOpenDrawbridge = 3,
kProcAvariciusTalks = 4,
kProcUrinate = 5,
kProcToilet = 6,
kProcBang = 7,
kProcBang2 = 8,
kProcStairs = 9,
kProcCardiffSurvey = 10,
kProcCardiffReturn = 11,
kProcCwytalotInHerts = 12,
kProcGetTiedUp = 13,
kProcGetTiedUp2 = 1,
kProcHangAround = 14,
kProcHangAround2 = 15,
kProcAfterTheShootemup = 32,
kProcJacquesWakesUp = 16,
kProcNaughtyDuke = 17,
kProcNaughtyDuke2 = 18,
kProcNaughtyDuke3 = 38,
kProcJump = 19,
kProcSequence = 20,
kProcCrapulusSpludOut = 21,
kProcDawnDelay = 22,
kProcBuyDrinks = 23,
kProcBuyWine = 24,
kProcCallsGuards = 25,
kProcGreetsMonk = 26,
kProcFallDownOubliette = 27,
kProcMeetAvaroid = 28,
kProcRiseUpOubliette = 29,
kProcRobinHoodAndGeida = 2,
kProcRobinHoodAndGeidaTalk = 30,
kProcAvalotReturns = 31,
kProcAvvySitDown = 33, // In Nottingham.
kProcGhostRoomPhew = 34,
kProcArkataShouts = 35,
kProcWinning = 36,
kProcAvalotFalls = 37,
kProcSpludwickGoesToCauldron = 39,
kProcSpludwickLeavesCauldron = 40,
kProcGiveLuteToGeida = 41
};
struct TimerType {
int32 _timeLeft;
byte _action;
byte _reason;
};
TimerType _times[7];
bool _timerLost; // Is the timer "lost"? (Because of using loseTimer())
Timer(AvalancheEngine *vm);
void addTimer(int32 duration, byte action, byte reason);
void updateTimer();
void loseTimer(byte which);
// Procedures to do things at the end of amounts of time:
void openDrawbridge();
void avariciusTalks();
void urinate();
void toilet();
void bang();
void bang2();
void stairs();
void cardiffSurvey();
void cardiffReturn();
void cwytalotInHerts();
void getTiedUp();
void getTiedUp2();
void hangAround();
void hangAround2();
void afterTheShootemup();
void jacquesWakesUp();
void naughtyDuke();
void naughtyDuke2();
void naughtyDuke3();
void jump();
void crapulusSaysSpludOut();
void buyDrinks();
void buyWine();
void callsGuards();
void greetsMonk();
void fallDownOubliette();
void meetAvaroid();
void riseUpOubliette();
void robinHoodAndGeida();
void robinHoodAndGeidaTalk();
void avalotReturns();
void avvySitDown();
void ghostRoomPhew();
void arkataShouts();
void winning();
void avalotFalls();
void spludwickGoesToCauldron();
void spludwickLeavesCauldron();
void giveLuteToGeida();
private:
AvalancheEngine *_vm;
};
} // End of namespace Avalanche.
#endif // AVALANCHE_TIMER_H