aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gray2003-12-17 14:33:34 +0000
committerJonathan Gray2003-12-17 14:33:34 +0000
commit56b831293d4a3d96a71564777d8f75185539a83c (patch)
tree0e45be23563e673d50f31204ebc80d6f96a23c21
parent6d1fba28d510526de568fa7354fa6327fd81d74d (diff)
downloadscummvm-rg350-56b831293d4a3d96a71564777d8f75185539a83c.tar.gz
scummvm-rg350-56b831293d4a3d96a71564777d8f75185539a83c.tar.bz2
scummvm-rg350-56b831293d4a3d96a71564777d8f75185539a83c.zip
add all of the paris boot params, 80 in particular is quite useful as it activates all sections of the map including the ability to travel outside of paris
svn-id: r11713
-rw-r--r--sword1/logic.h3
-rw-r--r--sword1/sword1.cpp351
-rw-r--r--sword1/sworddefs.h89
3 files changed, 439 insertions, 4 deletions
diff --git a/sword1/logic.h b/sword1/logic.h
index 3237656c72..b89c5b4e83 100644
--- a/sword1/logic.h
+++ b/sword1/logic.h
@@ -56,7 +56,7 @@ public:
int fnAddObject (BsObject *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnEnterSection (BsObject *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnPlaySequence (BsObject *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
-
+ int fnMegaSet (BsObject *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
private:
ObjectMan *_objMan;
@@ -94,7 +94,6 @@ private:
int fnForeground (BsObject *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnSort (BsObject *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnNoSprite (BsObject *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
- int fnMegaSet (BsObject *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnAnim (BsObject *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnSetFrame (BsObject *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
int fnFullAnim (BsObject *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
diff --git a/sword1/sword1.cpp b/sword1/sword1.cpp
index e6ba961988..2509d83a76 100644
--- a/sword1/sword1.cpp
+++ b/sword1/sword1.cpp
@@ -215,6 +215,357 @@ void SwordEngine::startPositions(int32 startNumber) {
SwordLogic::_scriptVars[POCKET_28] = 1;
SwordLogic::_scriptVars[POCKET_29] = 1;
}
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==3) // cafe
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 660;
+ SwordLogic::_scriptVars[CHANGE_Y] = 368;
+ SwordLogic::_scriptVars[CHANGE_DIR] = DOWN_LEFT;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_3;
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==4) // ready to use phone
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 463;
+ SwordLogic::_scriptVars[CHANGE_Y] = 391;
+ SwordLogic::_scriptVars[CHANGE_DIR] = DOWN;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_4;
+
+ SwordLogic::_scriptVars[MOUE_TEXT] = 1; // stop moue from entering ("Freeze...")
+ SwordLogic::_scriptVars[MOUE_NICO_FLAG] = 1; // Moue gave George her number
+// paris_flag=2; // for Nico's phone script
+ SwordLogic::_scriptVars[PARIS_FLAG] = 5; // to access room8 (cafe_repaired)
+ SwordLogic::_scriptVars[NICO_PHONE_FLAG] = 1; // Nico's number is on envelope
+ SwordLogic::_scriptVars[TAILOR_PHONE_FLAG] = 1; // Todryk's number is on envelope
+ SwordLogic::_scriptVars[WORKMAN_GONE_FLAG] = 1; // Workman not here
+ SwordLogic::_scriptVars[ALBERT_INFO_FLAG] = 1; // Albert has told us the tailor's number (for Nico's phone script)
+ SwordLogic::_scriptVars[SEEN_SEWERS_FLAG] = 1;
+
+ SwordLogic::_scriptVars[POCKET_30] = 1;
+ SwordLogic::_scriptVars[POCKET_31] = 1;
+ SwordLogic::_scriptVars[POCKET_32] = 1;
+ SwordLogic::_scriptVars[POCKET_33] = 1;
+ SwordLogic::_scriptVars[POCKET_34] = 1;
+ SwordLogic::_scriptVars[POCKET_35] = 1;
+ SwordLogic::_scriptVars[POCKET_36] = 1;
+ SwordLogic::_scriptVars[POCKET_37] = 1;
+ SwordLogic::_scriptVars[POCKET_38] = 1;
+ SwordLogic::_scriptVars[POCKET_39] = 1;
+
+ SwordLogic::_scriptVars[POCKET_40] = 1;
+ SwordLogic::_scriptVars[POCKET_41] = 1;
+ SwordLogic::_scriptVars[POCKET_42] = 1;
+ SwordLogic::_scriptVars[POCKET_43] = 1;
+ SwordLogic::_scriptVars[POCKET_44] = 1;
+ SwordLogic::_scriptVars[POCKET_45] = 1;
+ SwordLogic::_scriptVars[POCKET_46] = 1;
+ SwordLogic::_scriptVars[POCKET_47] = 1;
+ SwordLogic::_scriptVars[POCKET_48] = 1;
+ SwordLogic::_scriptVars[POCKET_49] = 1;
+
+ SwordLogic::_scriptVars[POCKET_50] = 1;
+ SwordLogic::_scriptVars[POCKET_51] = 1;
+ SwordLogic::_scriptVars[POCKET_52] = 1;
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==5) // court_yard
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 400;
+ SwordLogic::_scriptVars[CHANGE_Y] = 400;
+ SwordLogic::_scriptVars[CHANGE_DIR] = DOWN_LEFT;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_5;
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==7) // sewer_two
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 520;
+ SwordLogic::_scriptVars[CHANGE_Y] = 310;
+ SwordLogic::_scriptVars[CHANGE_DIR] = DOWN_LEFT;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_7;
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==8) // cafe_repaired
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 481;
+ SwordLogic::_scriptVars[CHANGE_Y] = 413;
+ SwordLogic::_scriptVars[CHANGE_DIR] = DOWN;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_8;
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==11) // costumier
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 264;
+ SwordLogic::_scriptVars[CHANGE_Y] = 436;
+ SwordLogic::_scriptVars[CHANGE_DIR] = DOWN_RIGHT;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_11;
+
+ _logic->fnAddObject(0,0,TISSUE,0,0,0,0,0);
+ _logic->fnAddObject(0,0,PHOTOGRAPH,0,0,0,0,0);
+ }
+ //-------------------------------------------------------------------------------------------------------
+ // HOTEL SECTION
+ else if (startNumber==12) // hotel_street
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 730;
+ SwordLogic::_scriptVars[CHANGE_Y] = 460;
+ SwordLogic::_scriptVars[CHANGE_DIR] = LEFT;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_12;
+
+ SwordLogic::_scriptVars[PARIS_FLAG] = 6;
+
+ _logic->fnAddObject(0,0,PHOTOGRAPH,0,0,0,0,0);
+
+ SwordLogic::_scriptVars[NICO_ADDRESS_FLAG] = 1;
+ SwordLogic::_scriptVars[NICO_PHONE_FLAG] = 1;
+ SwordLogic::_scriptVars[COSTUMES_ADDRESS_FLAG] = 1;
+ SwordLogic::_scriptVars[HOTEL_ADDRESS_FLAG] = 1;
+ SwordLogic::_scriptVars[AEROPORT_ADDRESS_FLAG] = 1;
+ SwordLogic::_scriptVars[TAILOR_PHONE_FLAG] = 1;
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==14) // hotel_corridor
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 528;
+ SwordLogic::_scriptVars[CHANGE_Y] = 484;
+ SwordLogic::_scriptVars[CHANGE_DIR] = UP;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_14;
+
+ _logic->fnAddObject(0,0,HOTEL_KEY,0,0,0,0,0);
+ _logic->fnAddObject(0,0,MANUSCRIPT,0,0,0,0,0);
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==17) // hotel_assassin
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 714;
+ SwordLogic::_scriptVars[CHANGE_Y] = 484;
+ SwordLogic::_scriptVars[CHANGE_DIR] = LEFT;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_17;
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==18) // gendarmerie
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 446;
+ SwordLogic::_scriptVars[CHANGE_Y] = 408;
+ SwordLogic::_scriptVars[CHANGE_DIR] = DOWN_LEFT;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_18;
+
+ SwordLogic::_scriptVars[PARIS_FLAG] = 5; // for Moue & Rosso
+ }
+ //-------------------------------------------------------------------------------------------------------
+ // MUSEUM RAID
+ else if (startNumber==27) // museum_street
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 300;
+ SwordLogic::_scriptVars[CHANGE_Y] = 510;
+ SwordLogic::_scriptVars[CHANGE_DIR] = UP_RIGHT;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_27;
+
+ SwordLogic::_scriptVars[PARIS_FLAG] = 12; // for Lobineau in Museum
+ SwordLogic::_scriptVars[MANUSCRIPT_ON_TABLE_10_FLAG] = 1;
+ }
+ //-------------------------------------------------------------------------------------------------------
+ // HOSPITAL SECTION
+ else if (startNumber==31) // hospital_street
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 400;
+ SwordLogic::_scriptVars[CHANGE_Y] = 500;
+ SwordLogic::_scriptVars[CHANGE_DIR] = UP_RIGHT;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_31;
+
+ SwordLogic::_scriptVars[PARIS_FLAG] = 11;
+
+ _logic->fnAddObject(0,0,PHOTOGRAPH,0,0,0,0,0);
+ _logic->fnAddObject(0,0,LAB_PASS,0,0,0,0,0);
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==32) // hospital_desk (after we've found out where Marquet is)
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 405;
+ SwordLogic::_scriptVars[CHANGE_Y] = 446;
+ SwordLogic::_scriptVars[CHANGE_DIR] = UP_RIGHT;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_32;
+
+ SwordLogic::_scriptVars[PARIS_FLAG] = 11;
+
+ SwordLogic::_scriptVars[EVA_TEXT] = 1; // talked to eva
+ SwordLogic::_scriptVars[EVA_MARQUET_FLAG] = 2;
+ SwordLogic::_scriptVars[EVA_NURSE_FLAG] = 4;
+ SwordLogic::_scriptVars[FOUND_WARD_FLAG] = 1;
+ SwordLogic::_scriptVars[CONSULTANT_HERE] = 1;
+
+ compact = (BsObject*)_objectMan->fetchObject(PLAYER);
+ _logic->fnMegaSet(compact,PLAYER,GEORGE_WLK,MEGA_WHITE,0,0,0,0);
+
+ SwordLogic::_scriptVars[GEORGE_CDT_FLAG] = WHT_TLK_TABLE;
+ SwordLogic::_scriptVars[GEORGE_TALK_FLAG] = 0;
+ SwordLogic::_scriptVars[WHITE_COAT_FLAG] = 1;
+ SwordLogic::_scriptVars[GEORGE_ALLOWED_REST_ANIMS] = 0; // because wearing white coat now
+
+ SwordLogic::_scriptVars[GOT_BENOIR_FLAG] = 1;
+
+ _logic->fnAddObject(0,0,PHOTOGRAPH,0,0,0,0,0);
+ _logic->fnAddObject(0,0,LAB_PASS,0,0,0,0,0);
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==35) // hospital_jacques
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 640;
+ SwordLogic::_scriptVars[CHANGE_Y] = 500;
+ SwordLogic::_scriptVars[CHANGE_DIR] = LEFT;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_35;
+
+ SwordLogic::_scriptVars[PARIS_FLAG] = 11;
+
+ SwordLogic::_scriptVars[EVA_TEXT] = 1; // talked to eva
+ SwordLogic::_scriptVars[EVA_MARQUET_FLAG] = 2;
+ SwordLogic::_scriptVars[EVA_NURSE_FLAG] = 4;
+ SwordLogic::_scriptVars[FOUND_WARD_FLAG] = 1;
+ SwordLogic::_scriptVars[CONSULTANT_HERE] = 1;
+
+ compact = (BsObject*)_objectMan->fetchObject(PLAYER);
+ _logic->fnMegaSet(compact,PLAYER,GEORGE_WLK,MEGA_WHITE,0,0,0,0);
+
+ SwordLogic::_scriptVars[GEORGE_CDT_FLAG] = WHT_TLK_TABLE;
+ SwordLogic::_scriptVars[GEORGE_TALK_FLAG] = 0;
+ SwordLogic::_scriptVars[WHITE_COAT_FLAG] = 1;
+ SwordLogic::_scriptVars[GEORGE_ALLOWED_REST_ANIMS] = 0; // because wearing white coat now
+ SwordLogic::_scriptVars[DOOR_34_OPEN] = 1;
+
+ SwordLogic::_scriptVars[GOT_BENOIR_FLAG] = 2;
+ SwordLogic::_scriptVars[HOS_POS_FLAG] = 26;
+ SwordLogic::_scriptVars[BENOIR_FLAG] = 24; // for 'george_enters_ward' script
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==36) // montfaucon
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 300;
+ SwordLogic::_scriptVars[CHANGE_Y] = 480;
+ SwordLogic::_scriptVars[CHANGE_DIR] = RIGHT;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_36;
+
+ _logic->fnAddObject(0,0,LENS,0,0,0,0,0);
+ _logic->fnAddObject(0,0,RED_NOSE,0,0,0,0,0);
+ _logic->fnAddObject(0,0,LIFTING_KEYS,0,0,0,0,0);
+
+ SwordLogic::_scriptVars[MONTFAUCON_CONTROL_FLAG] = 1;
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==37) // catacomb_sewer
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 592;
+ SwordLogic::_scriptVars[CHANGE_Y] = 386;
+ SwordLogic::_scriptVars[CHANGE_DIR] = RIGHT;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_37;
+
+ _logic->fnAddObject(0,0,LIFTING_KEYS,0,0,0,0,0);
+ _logic->fnAddObject(0,0,TRIPOD,0,0,0,0,0);
+ _logic->fnAddObject(0,0,GEM,0,0,0,0,0);
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==38) // catacomb_room
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 200;
+ SwordLogic::_scriptVars[CHANGE_Y] = 390;
+ SwordLogic::_scriptVars[CHANGE_DIR] = RIGHT;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_38;
+
+ _logic->fnAddObject(0,0,TRIPOD,0,0,0,0,0);
+ _logic->fnAddObject(0,0,GEM,0,0,0,0,0);
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==39) // catacomb_meeting
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 636;
+ SwordLogic::_scriptVars[CHANGE_Y] = 413;
+ SwordLogic::_scriptVars[CHANGE_DIR] = DOWN_LEFT;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_39;
+
+ SwordLogic::_scriptVars[MEETING_FLAG] = 3; // meeting finished
+
+ _logic->fnAddObject(0,0,TRIPOD,0,0,0,0,0);
+ _logic->fnAddObject(0,0,GEM,0,0,0,0,0);
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==40) // excavation_exterior
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 648;
+ SwordLogic::_scriptVars[CHANGE_Y] = 492;
+ SwordLogic::_scriptVars[CHANGE_DIR] = LEFT;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_40;
+
+ SwordLogic::_scriptVars[NICO_PHONE_FLAG] = 1;
+ SwordLogic::_scriptVars[PARIS_FLAG] = 16;
+
+ _logic->fnAddObject(0,0,PLASTER,0,0,0,0,0);
+ _logic->fnAddObject(0,0,POLISHED_CHALICE,0,0,0,0,0);
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==48) // templar_church
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 315;
+ SwordLogic::_scriptVars[CHANGE_Y] = 392;
+ SwordLogic::_scriptVars[CHANGE_DIR] = DOWN;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_48;
+
+ _logic->fnAddObject(0,0,CHALICE,0,0,0,0,0);
+ _logic->fnAddObject(0,0,LENS,0,0,0,0,0);
+
+ SwordLogic::_scriptVars[CHALICE_FLAG] = 2; // from end of Spain1, when George gets chalice
+ SwordLogic::_scriptVars[NEJO_TEXT] = 1; // so priest is there
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==99) // test text+speech on blank screen (sc99)
+ {
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_99;
+
+ // if (testingText)
+ if (1)
+ {
+// lastLineNo = testTextSection*65536 + LastTextNumber(testTextSection);
+ SwordLogic::_scriptVars[LASTLINENO] = 146*65536 + _objectMan->lastTextNumber(146); // don't finished until at last line in last section
+ }
+ }
+ //-------------------------------------------------------------------------------------------------------
+ else if (startNumber==80) // Paris Map
+ {
+ SwordLogic::_scriptVars[CHANGE_X] = 645;
+ SwordLogic::_scriptVars[CHANGE_Y] = 160;
+ SwordLogic::_scriptVars[CHANGE_DIR] = DOWN;
+ SwordLogic::_scriptVars[CHANGE_PLACE] = FLOOR_80;
+
+ SwordLogic::_scriptVars[PARIS_FLAG] = 3; // for Nico's appartment
+ SwordLogic::_scriptVars[NICO_CLOWN_FLAG] = 3;
+
+ SwordLogic::_scriptVars[NICO_DOOR_FLAG] = 2; // for instant access to Nico's appartment
+
+ _logic->fnAddObject(0,0,RED_NOSE,0,0,0,0,0);
+ _logic->fnAddObject(0,0,PHOTOGRAPH,0,0,0,0,0);
+ _logic->fnAddObject(0,0,PLASTER,0,0,0,0,0);
+ _logic->fnAddObject(0,0,LAB_PASS,0,0,0,0,0); // for hospital
+
+ SwordLogic::_scriptVars[MANUSCRIPT_FLAG] = 1;
+
+ SwordLogic::_scriptVars[NICO_ADDRESS_FLAG] = 1;
+ SwordLogic::_scriptVars[NICO_PHONE_FLAG] = 1;
+ SwordLogic::_scriptVars[COSTUMES_ADDRESS_FLAG] = 1;
+ SwordLogic::_scriptVars[HOTEL_ADDRESS_FLAG] = 1;
+ SwordLogic::_scriptVars[MUSEUM_ADDRESS_FLAG] = 1;
+ SwordLogic::_scriptVars[HOSPITAL_ADDRESS_FLAG] = 1;
+ SwordLogic::_scriptVars[MONTFACN_ADDRESS_FLAG] = 1;
+ SwordLogic::_scriptVars[AEROPORT_ADDRESS_FLAG] = 1;
+ SwordLogic::_scriptVars[NERVAL_ADDRESS_FLAG] = 1;
+
+ SwordLogic::_scriptVars[IRELAND_MAP_FLAG] = 1;
+ SwordLogic::_scriptVars[SPAIN_MAP_FLAG] = 1;
+ SwordLogic::_scriptVars[SYRIA_FLAG] = 2;
+
+ SwordLogic::_scriptVars[TAILOR_PHONE_FLAG] = 1;
+ }
+ else
+ {
+ error("Can't start in location %d", startNumber);
+ }
+
compact = (BsObject*)_objectMan->fetchObject(PLAYER);
_logic->fnEnterSection(compact, PLAYER, startNumber, 0, 0, 0, 0, 0); // (automatically opens the compact resource for that section)
diff --git a/sword1/sworddefs.h b/sword1/sworddefs.h
index f59d761753..2077e3b3ab 100644
--- a/sword1/sworddefs.h
+++ b/sword1/sworddefs.h
@@ -144,15 +144,100 @@ enum Language {
#define LEFT 6
#define UP_LEFT 7
#define U_L 7
-#define FLOOR_1 65536
#define BENOIR 8585216
#define ROSSO 8716288
#define MOUE 9502720
#define ALBERT 9568256
#define DUANE 8781824
-#define FLOOR_2 131072
#define LIFTING_KEYS 18
#define ROSSO_CARD 27
+#define TISSUE 32
+#define PHOTOGRAPH 10
+#define HOTEL_KEY 4
+#define MANUSCRIPT 19
+#define LAB_PASS 17
+#define LENS 37
+#define RED_NOSE 7
+#define TRIPOD 36
+#define GEM 13
+#define PLASTER 23
+#define POLISHED_CHALICE 8
+#define CHALICE 31
+
+#define FLOOR_1 65536
+#define FLOOR_2 131072
+#define FLOOR_3 196608
+#define FLOOR_4 262144
+#define FLOOR_5 327680
+#define FLOOR_6 393216
+#define FLOOR_7 458752
+#define FLOOR_8 524288
+#define FLOOR_9 589824
+#define FLOOR_10 655360
+#define FLOOR_11 720896
+#define FLOOR_12 786432
+#define FLOOR_13 851968
+#define FLOOR_14 917504
+#define FLOOR_15 983040
+#define FLOOR_16 1048576
+#define FLOOR_17 1114112
+#define FLOOR_18 1179648
+#define FLOOR_19 1245184
+#define FLOOR_20 1310720
+#define FLOOR_21 1376256
+#define FLOOR_22 1441792
+#define FLOOR_23 1507328
+#define FLOOR_24 1572864
+#define FLOOR_25 1638400
+#define FLOOR_26 1703936
+#define FLOOR_27 1769472
+#define FLOOR_28 1835008
+#define FLOOR_29 1900544
+#define FLOOR_31 2031616
+#define FLOOR_32 2097152
+#define FLOOR_33 2162688
+#define FLOOR_34 2228224
+#define FLOOR_35 2293760
+#define FLOOR_36 2359296
+#define FLOOR_37 2424832
+#define FLOOR_38 2490368
+#define FLOOR_39 2555904
+#define FLOOR_40 2621440
+#define FLOOR_41 2686976
+#define FLOOR_42 2752512
+#define FLOOR_43 2818048
+#define FLOOR_45 2949120
+#define FLOOR_46 3014656
+#define FLOOR_47 3080192
+#define FLOOR_48 3145728
+#define FLOOR_49 3211264
+#define FLOOR_50 3276800
+#define FLOOR_53 3473408
+#define FLOOR_54 3538944
+#define FLOOR_55 3604480
+#define FLOOR_56 3670016
+#define FLOOR_57 3735552
+#define FLOOR_58 3801088
+#define FLOOR_59 3866624
+#define FLOOR_60 3932160
+#define FLOOR_62 4063232
+#define FLOOR_63 4128768
+#define FLOOR_65 4259840
+#define FLOOR_66 4325376
+#define FLOOR_67 4390912
+#define FLOOR_69 4521984
+#define FLOOR_72 4718592
+#define FLOOR_73 4784128
+#define FLOOR_74 4849664
+#define FLOOR_75 4915200
+#define FLOOR_76 4980736
+#define FLOOR_77 5046272
+#define FLOOR_78 5111808
+#define FLOOR_79 5177344
+#define FLOOR_80 5242880
+#define FLOOR_86 5636096
+#define FLOOR_91 5963776
+#define FLOOR_99 6488064
#define menu_bible 69