mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-23 11:04:44 +00:00
SUPERNOVA2: Add cabin room
This commit is contained in:
parent
247deea4fc
commit
286f12c830
@ -107,7 +107,7 @@ enum ObjectId {
|
||||
TKNIFE,ROPE,NOTE,MOUTH,
|
||||
HOLE1,HOLE2,HOLE3,HOLE4,HOLE5,HOLE6,HOLE7,HOLE8,HOLE9,HOLE10,
|
||||
HOLE11,HOLE12,HOLE13,HOLE14,HOLE15,HOLE16,HOLE17,HOLE18,HOLE19,HOLE20,
|
||||
HOLE21,HOLE22,HOLE23,HOLE24,HOLE25,SHIELD,
|
||||
HOLE21,HOLE22,HOLE23,HOLE24,HOLE25,SIGN,
|
||||
SLOT,HOLE,STONES,
|
||||
BST1,BST2,BST3,BST4,BST5,BST6,BST7,BST8,
|
||||
BST9,BST10,BST11,BST12,BST13,BST14,BST15,BST16,
|
||||
@ -116,7 +116,7 @@ enum ObjectId {
|
||||
BMASK,BOTTLE,PLAYER,TOOTHBRUSH,BOOKS,LEXICON,PLANT,SNAKE,
|
||||
CUP,JOYSTICK,BOTTLE1,BOTTLE2,BOTTLE3,BOTTLE4,BOX,FACES,
|
||||
SELLER,POSTER,AXACUSSER,KP_ENTRANCE,CHIP,CARD,
|
||||
DOODLE,DOODLE2,BELL,GROPE,DOOR_L,DOOR_R,ID_CARD,
|
||||
SCRIBBLE1,SCRIBBLE2,BELL,GROPE,DOOR_L,DOOR_R,ID_CARD,
|
||||
MAGNET,UNDER_BED,KEY,VALVE,WARDROBE,DISCMAN,
|
||||
SMALL_DOOR,BACK_MONEY,WALL,SUCTION_CUP,IMITATION,SP_KEYCARD,ALARM_CRACKER,
|
||||
ENCRYPTED_DOOR,ALARM_ANLAGE,MUS_STREET,BIG_DOOR,INVESTMENT,
|
||||
@ -153,12 +153,12 @@ kString115, kString116, kString117, kString118, kString119,
|
||||
kString120, kString121, kString122, kString123, kString124,
|
||||
kString125, kString126, kString127, kString128, kString129,
|
||||
kString130, kString131, kString132, kString133, kString134,
|
||||
kString135, kString136, kString137, kString138, kString139,
|
||||
kString135, kString136, kStringSign, kString138, kString139,
|
||||
kString140, kString141, kString142, kString143, kString144,
|
||||
kString145, kString146, kString147, kString148, kString149,
|
||||
kString150, kString151, kString152, kString153, kString154,
|
||||
kString155, kString156, kString157, kString158, kString159,
|
||||
kString160, kString161, kString162, kString163, kString164,
|
||||
kString160, kString161, kString162, kStringSlot, kString164,
|
||||
kString165, kString166, kString167, kString168, kStringExit,
|
||||
kString170, kString171, kString172, kString173, kString174,
|
||||
kString175, kString176, kString177, kStringDefaultDescription, kStringLooksMetal,
|
||||
@ -169,8 +169,8 @@ kString195, kString196, kString197, kString198, kString199,
|
||||
kStringAirportEntrance, kStringAirport, kStringDowntown, kStringCulturePalace, kStringEarth,
|
||||
kStringPrivateApartment, kStringLeaveTaxi, kStringPay, kStringAddress, kStringCheater,
|
||||
kStringNotEnoughMoney, kStringTaxiAccelerating, kString5MinutesLater, kStringAlreadyHavePole, kStringSawPole,
|
||||
kStringOnlyShop, kStringCabinOccupiedSay, kString217, kString218, kString219,
|
||||
kString220, kString221, kString222, kString223, kString224,
|
||||
kStringOnlyShop, kStringCabinOccupiedSay, kStringTakeMoney, kStringAlreadyPaid, kStringNoMoney,
|
||||
kStringPay10Xa, kStringWillPassOut, kStringRest, kString223, kString224,
|
||||
kString225, kString226, kString227, kString228, kString229,
|
||||
kString230, kString231, kString232, kString233, kString234,
|
||||
kString235, kString236, kString237, kString238, kString239,
|
||||
@ -187,9 +187,9 @@ kStringVehicleDescription, kStringEntranceDescription, kStringWallet, kStringWal
|
||||
kStringDeviceDescription, kStringIdCard, kStringIdCardDescription, kStringStaircase, kStringStaircaseDescription,
|
||||
kStringBusinessStreet, kStringBusinessStreetDescription, kStringRod, kStringPost, kStringRailing,
|
||||
kStringPoster, kStringPosterDescription, kStringCabin, kStringCabinFree, kStringCabinOccupied,
|
||||
kStringFeet, kStringFeetDescription, kString307, kString308, kString309,
|
||||
kString310, kString311, kString312, kString313, kString314,
|
||||
kString315, kString316, kString317, kString318, kString319,
|
||||
kStringFeet, kStringFeetDescription, kStringHood, kStringHoodDescription, kString400Xa,
|
||||
kString10Xa, kStringSlotDescription1, kStringSlotDescription2, kStringChair, kStringChairDescription,
|
||||
kStringScribble, kStringFace, kStringFaceDescription, kString318, kString319,
|
||||
kString320, kString321, kString322, kString323, kString324,
|
||||
kString325, kString326, kString327, kString328, kString329,
|
||||
kString330, kString331, kString332, kString333, kString334,
|
||||
|
@ -737,10 +737,23 @@ bool Games::interact(Action verb, Object &obj1, Object &obj2) {
|
||||
Cabin::Cabin(Supernova2Engine *vm, GameManager *gm) {
|
||||
_vm = vm;
|
||||
_gm = gm;
|
||||
_paid = false;
|
||||
|
||||
_fileNumber = 6;
|
||||
_fileNumber = 7;
|
||||
_id = CABIN;
|
||||
_shown[0] = kShownTrue;
|
||||
|
||||
_objectState[0] = Object(_id, kStringExit, kStringDefaultDescription, NULLOBJECT, EXIT, 255, 255, 0, GAMES, 22);
|
||||
_objectState[1] = Object(_id, kStringHood, kStringHoodDescription, NULLOBJECT, NULLTYPE, 0, 0, 0);
|
||||
_objectState[2] = Object(_id, kString400Xa, kStringDefaultDescription, PRIZE, TAKE, 255, 255, 2 + 180);
|
||||
_objectState[3] = Object(_id, kString10Xa, kStringDefaultDescription, BACK_MONEY, TAKE, 255, 255, 2 + 128);
|
||||
_objectState[4] = Object(_id, kStringSlot, kStringSlotDescription1, SLOT1, COMBINABLE, 2, 2, 0);
|
||||
_objectState[5] = Object(_id, kStringSlot, kStringSlotDescription2, NULLOBJECT, COMBINABLE, 3, 3, 0);
|
||||
_objectState[6] = Object(_id, kStringChair, kStringChairDescription, CHAIR, NULLTYPE, 4, 4, 0);
|
||||
_objectState[7] = Object(_id, kStringScribble, kStringDefaultDescription, SCRIBBLE1, NULLTYPE, 5, 5, 0);
|
||||
_objectState[8] = Object(_id, kStringScribble, kStringDefaultDescription, SCRIBBLE2, NULLTYPE, 6, 6, 0);
|
||||
_objectState[9] = Object(_id, kStringFace, kStringFaceDescription, NULLOBJECT, NULLTYPE, 7, 7, 0);
|
||||
_objectState[10] = Object(_id, kStringSign, kStringDefaultDescription, SIGN, UNNECESSARY, 1, 1, 0);
|
||||
}
|
||||
|
||||
void Cabin::onEntrance() {
|
||||
@ -748,9 +761,72 @@ void Cabin::onEntrance() {
|
||||
}
|
||||
|
||||
void Cabin::animation() {
|
||||
if (_paid) {
|
||||
if (isSectionVisible(1))
|
||||
_vm->renderImage(1 + 128);
|
||||
else
|
||||
_vm->renderImage(1);
|
||||
}
|
||||
_gm->setAnimationTimer(4);
|
||||
}
|
||||
|
||||
bool Cabin::interact(Action verb, Object &obj1, Object &obj2) {
|
||||
if (verb == ACTION_USE && Object::combine(obj1, obj2, MONEY, SLOT1)) {
|
||||
if (isSectionVisible(2))
|
||||
_vm->renderMessage(kStringTakeMoney);
|
||||
else if (_paid)
|
||||
_vm->renderMessage(kStringAlreadyPaid);
|
||||
else if (_gm->_state._money < 10)
|
||||
_vm->renderMessage(kStringNoMoney);
|
||||
else {
|
||||
_vm->renderMessage(kStringPay10Xa);
|
||||
_gm->takeMoney(-10);
|
||||
_paid = true;
|
||||
}
|
||||
}
|
||||
else if (verb == ACTION_USE && obj1._id == CHAIR) {
|
||||
if (_paid) {
|
||||
if (_var2) {
|
||||
_vm->paletteFadeOut();
|
||||
_vm->setCurrentImage(31);
|
||||
_vm->renderImage(0);
|
||||
_vm->paletteFadeIn();
|
||||
_paid = true;
|
||||
_gm->waitOnInput(100000);
|
||||
_vm->paletteFadeOut();
|
||||
_vm->setCurrentImage(7);
|
||||
_vm->renderImage(0);
|
||||
setSectionVisible(1, kShownFalse);
|
||||
_paid = false;
|
||||
_vm->renderRoom(*this);
|
||||
_vm->renderImage(2);
|
||||
_gm->drawMapExits();
|
||||
_gm->drawInventory();
|
||||
_gm->drawStatus();
|
||||
_gm->drawCommandBox();
|
||||
_vm->paletteFadeIn();
|
||||
getObject(3)->_click = 8;
|
||||
} else {
|
||||
_gm->_state._tipsy = false;
|
||||
_vm->paletteFadeOut();
|
||||
_vm->_system->fillScreen(kColorBlack);
|
||||
Common::String text = _vm->getGameString(kStringWillPassOut);
|
||||
_vm->renderMessage(text);
|
||||
_gm->waitOnInput((text.size() + 20) * _vm->_textSpeed / 10);
|
||||
_vm->removeMessage();
|
||||
_vm->saveGame(kSleepAutosaveSlot, "autosave");
|
||||
_gm->_inventory.clear();
|
||||
_gm->changeRoom(PYRAMID);
|
||||
_gm->drawStatus();
|
||||
_gm->drawInventory();
|
||||
_gm->drawMapExits();
|
||||
_gm->drawCommandBox();
|
||||
}
|
||||
} else
|
||||
_vm->renderMessage(kStringRest);
|
||||
}
|
||||
else
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -138,6 +138,8 @@ public:
|
||||
virtual bool interact(Action verb, Object &obj1, Object &obj2);
|
||||
|
||||
private:
|
||||
bool _paid;
|
||||
bool _var2; // Not sure what this variable means yet
|
||||
};
|
||||
|
||||
class Kiosk : public Room {
|
||||
|
@ -40,6 +40,7 @@ bool GameManager::serialize(Common::WriteStream *out) {
|
||||
out->writeByte(_state._addressKnown);
|
||||
out->writeByte(_state._poleMagnet);
|
||||
out->writeByte(_state._admission);
|
||||
out->writeByte(_state._tipsy);
|
||||
|
||||
// Inventory
|
||||
out->writeSint32LE(_inventory.getSize());
|
||||
@ -70,6 +71,7 @@ bool GameManager::deserialize(Common::ReadStream *in, int version) {
|
||||
_state._addressKnown = in->readByte();
|
||||
_state._poleMagnet = in->readByte();
|
||||
_state._admission = in->readByte();
|
||||
_state._tipsy = in->readByte();
|
||||
_vm->setGameString(kStringMoney, Common::String::format("%d Xa", _state._money));
|
||||
|
||||
_oldTime = g_system->getMillis();
|
||||
@ -333,6 +335,7 @@ void GameManager::initState() {
|
||||
_state._previousRoom = _currentRoom;
|
||||
_state._poleMagnet = false;
|
||||
_state._admission = 0;
|
||||
_state._tipsy = false;
|
||||
}
|
||||
|
||||
void GameManager::initRooms() {
|
||||
|
@ -39,6 +39,7 @@ struct GameState {
|
||||
Room *_previousRoom;
|
||||
bool _poleMagnet;
|
||||
char _admission;
|
||||
bool _tipsy;
|
||||
};
|
||||
|
||||
class Inventory {
|
||||
|
Loading…
x
Reference in New Issue
Block a user