aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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