mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-10 04:43:26 +00:00
a6c6c74350
Powered by: git ls-files "*.cpp" "*.h" | xargs sed -i -e 's/[ \t]*$//'
199 lines
5.7 KiB
C++
199 lines
5.7 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.
|
|
*
|
|
* Additional copyright for this file:
|
|
* Copyright (C) 1995-1997 Presto Studios, Inc.
|
|
*
|
|
* 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.
|
|
*
|
|
*/
|
|
|
|
#include "pegasus/energymonitor.h"
|
|
#include "pegasus/gamestate.h"
|
|
#include "pegasus/pegasus.h"
|
|
#include "pegasus/items/biochips/pegasuschip.h"
|
|
#include "pegasus/neighborhood/tsa/fulltsa.h"
|
|
#include "pegasus/neighborhood/tsa/tinytsa.h"
|
|
|
|
namespace Pegasus {
|
|
|
|
PegasusChip::PegasusChip(const ItemID id, const NeighborhoodID neighborhood, const RoomID room, const DirectionConstant direction) :
|
|
BiochipItem(id, neighborhood, room, direction), _recallSpot(kPegasusRecallSpotID) {
|
|
_recallSpot.setArea(Common::Rect(kAIMiddleAreaLeft + 116, kAIMiddleAreaTop + 63, kAIMiddleAreaLeft + 184, kAIMiddleAreaTop + 91));
|
|
_recallSpot.setHotspotFlags(kPegasusBiochipSpotFlag);
|
|
g_allHotspots.push_back(&_recallSpot);
|
|
setItemState(kPegasusTSA00);
|
|
}
|
|
|
|
PegasusChip::~PegasusChip() {
|
|
g_allHotspots.removeOneHotspot(kPegasusRecallSpotID);
|
|
}
|
|
|
|
void PegasusChip::select() {
|
|
BiochipItem::select();
|
|
setUpPegasusChip();
|
|
}
|
|
|
|
void PegasusChip::setUpPegasusChip() {
|
|
switch (GameState.getCurrentNeighborhood()) {
|
|
case kCaldoriaID:
|
|
setItemState(kPegasusCaldoria);
|
|
break;
|
|
case kFullTSAID:
|
|
case kFinalTSAID:
|
|
case kTinyTSAID:
|
|
setItemState(kPegasusTSA10);
|
|
break;
|
|
case kPrehistoricID:
|
|
if (((PegasusEngine *)g_engine)->playerHasItemID(kHistoricalLog))
|
|
setItemState(kPegasusPrehistoric00);
|
|
else
|
|
setItemState(kPegasusPrehistoric10);
|
|
break;
|
|
case kMarsID:
|
|
if (GameState.getMarsFinished())
|
|
setItemState(kPegasusMars00);
|
|
else
|
|
setItemState(kPegasusMars10);
|
|
break;
|
|
case kWSCID:
|
|
if (GameState.getWSCFinished())
|
|
setItemState(kPegasusWSC00);
|
|
else
|
|
setItemState(kPegasusWSC10);
|
|
break;
|
|
case kNoradAlphaID:
|
|
case kNoradDeltaID:
|
|
if (GameState.getNoradFinished())
|
|
setItemState(kPegasusNorad00);
|
|
else
|
|
setItemState(kPegasusNorad10);
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Only does something if the chip should be announcing that the time zone is finished...
|
|
void PegasusChip::setUpPegasusChipRude() {
|
|
switch (GameState.getCurrentNeighborhood()) {
|
|
case kPrehistoricID:
|
|
if (((PegasusEngine *)g_engine)->playerHasItemID(kHistoricalLog))
|
|
setItemState(kPegasusPrehistoric00);
|
|
break;
|
|
case kMarsID:
|
|
if (GameState.getMarsFinished())
|
|
setItemState(kPegasusMars00);
|
|
break;
|
|
case kWSCID:
|
|
if (GameState.getWSCFinished())
|
|
setItemState(kPegasusWSC00);
|
|
break;
|
|
case kNoradAlphaID:
|
|
case kNoradDeltaID:
|
|
if (GameState.getNoradFinished())
|
|
setItemState(kPegasusNorad00);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void PegasusChip::activatePegasusHotspots() {
|
|
switch (GameState.getCurrentNeighborhood()) {
|
|
case kPrehistoricID:
|
|
// WORKAROUND: Don't allow the player to recall if they don't have
|
|
// the historical log. Otherwise, gameplay is broken when returning
|
|
// to the TSA.
|
|
if (!((PegasusEngine *)g_engine)->playerHasItemID(kHistoricalLog))
|
|
return;
|
|
// fall through
|
|
case kMarsID:
|
|
case kWSCID:
|
|
case kNoradAlphaID:
|
|
case kNoradDeltaID:
|
|
_recallSpot.setActive();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void PegasusChip::clickInPegasusHotspot() {
|
|
PegasusEngine *vm = (PegasusEngine *)g_engine;
|
|
|
|
ItemState thisState = getItemState();
|
|
ItemState hiliteState;
|
|
|
|
switch (thisState) {
|
|
case kPegasusPrehistoric00:
|
|
hiliteState = kPegasusPrehistoric01;
|
|
break;
|
|
case kPegasusPrehistoric10:
|
|
hiliteState = kPegasusPrehistoric11;
|
|
break;
|
|
case kPegasusMars00:
|
|
hiliteState = kPegasusMars01;
|
|
break;
|
|
case kPegasusMars10:
|
|
hiliteState = kPegasusMars11;
|
|
break;
|
|
case kPegasusNorad00:
|
|
hiliteState = kPegasusNorad01;
|
|
break;
|
|
case kPegasusNorad10:
|
|
hiliteState = kPegasusNorad11;
|
|
break;
|
|
case kPegasusWSC00:
|
|
hiliteState = kPegasusWSC01;
|
|
break;
|
|
case kPegasusWSC10:
|
|
hiliteState = kPegasusWSC11;
|
|
break;
|
|
default:
|
|
error("Invalid pegasus chip state");
|
|
}
|
|
|
|
// WORKAROUND: The original called setItemState() here. However,
|
|
// since we're overriding select() to call setUpPegasusChip(),
|
|
// the highlighted frame is never displayed! So, we're manually
|
|
// setting the state and selecting the item. Also of note is that
|
|
// setItemState() for this class is effectively useless since it
|
|
// always gets overriden in the select() function. The only reason
|
|
// that this doesn't end in infinite recursion is because setItemState()
|
|
// has a check against the current state to make sure you don't call
|
|
// select() again. </rant>
|
|
_itemState = hiliteState;
|
|
BiochipItem::select();
|
|
|
|
uint32 time = g_system->getMillis();
|
|
while (g_system->getMillis() < time + 500) {
|
|
vm->refreshDisplay();
|
|
g_system->delayMillis(10);
|
|
}
|
|
|
|
setItemState(thisState);
|
|
|
|
if (!((Neighborhood *)g_neighborhood)->okayToJump())
|
|
return;
|
|
|
|
if (g_energyMonitor)
|
|
g_energyMonitor->stopEnergyDraining();
|
|
|
|
if (GameState.getTSAState() == kPlayerWentToPrehistoric || GameState.allTimeZonesFinished())
|
|
vm->jumpToNewEnvironment(kFullTSAID, kTSA37, kNorth);
|
|
else
|
|
vm->jumpToNewEnvironment(kTinyTSAID, kTinyTSA37, kNorth);
|
|
}
|
|
|
|
} // End of namespace Pegasus
|