SUPERNOVA2: Add cabin room

This commit is contained in:
Jaromir Wysoglad 2019-06-03 17:03:27 +02:00 committed by Thierry Crozat
parent 247deea4fc
commit 286f12c830
5 changed files with 92 additions and 10 deletions

View File

@ -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,

View File

@ -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;
}

View File

@ -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 {

View File

@ -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() {

View File

@ -39,6 +39,7 @@ struct GameState {
Room *_previousRoom;
bool _poleMagnet;
char _admission;
bool _tipsy;
};
class Inventory {