ICT290 / src / ShaysWorld / main.cpp
main.cpp
Raw
#include "main.h"
#include "texturedPolygons.h"

//--------------------------------------------------------------------------------------

#define PI 3.1415962654

// TEXTURE IMAGE AXISES
#define XY 0
#define XZ 1
#define YZ 2
#define YZ_FLIP 3
#define XY_FLIP 4

// PLANE TYPES
#define FLAT_PLANE 0
#define XY_PLANE 1
#define ZY_PLANE 2

// TEXTURES
// Grass Textures
#define GRASS 1
#define GRASS_2 2
#define GRASS_HILL 3
// Pavement Textures
#define PAVEMENT 4
#define PAVEMENT_TOP 5
#define PAVEMENTSIDE_LEFT 6
#define PAVEMENTSIDE_RIGHT 7
#define PAVEMENTSIDE_TOP 8
#define PAVEMENT_CORNER_1 9
#define PAVEMENT_CORNER_2 10
#define PAVEMENT_FLIP 11
#define PAVEMENT_TOP_FLIP 12
#define PAVEMENT_16 13
#define DOORPAVE_1 14
// Wall Brick Textures
#define WALL_BRICK_YZ 15
#define WALL_BRICK_XY 16
#define WALL_BRICK_XY_87WIDTH 17
#define WALL_BRICK_GAP_YZ 18
#define WALL_BRICK_GAP2_YZ 19
#define WALL_BRICK_USD_YZ 20
#define WALL_BRICK_XY_END 21
#define WALL_BRICK_YZ_END 22
#define WALL_GAP_1 23
#define WALL_BRICK_3_4 24
#define SHADOW_BRICK 25
#define WALL_BRICK_SEC_SIGN 216
// Window Post Textures
#define WINDOWPOST_CHANC_FRONT 26
#define WINDOWPOST_CHANC_RIGHT 27
#define WINDOWPOST_CHANC_LEFT 28
#define WINDOWLEDGE_CHANC_FRONT 29
#define WINDOWLEDGE_CHANC_TOP 30
#define WINDOWPOST_PHYSSCI_FRONT 31
#define WINDOWPOST_PHYSSCI_RIGHT 32
#define WINDOWPOST_PHYSSCI_LEFT 33
#define WINDOWPOST_LIB_FRONT 34
#define WINDOWPOST_LIB_LEFT 35
#define WINDOWPOST_LIB_RIGHT 36
// Door Post Textures
#define DOOR_POST_SECURITY 37
// Window Ledge Textures
#define WINDOWLEDGE_PS_FRONT 38
#define WINDOWLEDGE_PS_TOP 39
#define WINDOWLEDGE_PS_BOTT 40
#define WINDOWLEDGE_LIB_A 41
#define WINDOWLEDGE_LIB_B 42
#define WINDOWLEDGE_LIB_TOP_A 43
#define WINDOWLEDGE_LIB_TOP_B 44
#define WINDOW_LEDGE_END_1 45
#define WINDOW_LEDGE_END_2 46
// Main Post Textures
#define MAIN_POST 47
#define MAIN_POST_2 48
// Door Post Textures
#define DOOR_POST_CHANC 49
#define DOOR_SIDEPOST_CHANC 50
#define DOOR_POST_LIB 215
// Coloured Posts Textures
#define PURPLE_POST 51
#define PURPLE_POSTSIDE 52
#define RED_POST 53
#define RED_POSTSIDE 54
// Roof Textures
#define ROOF_TOP 55
#define ROOF_TOP_LIB 56
#define ROOF_PLANKS 57
#define ROOF_BEAM_1 58
#define ROOF_PLANKS_2 59
#define ROOF_BEAM_2 60
#define BELOW_ROOF_FILL 61
#define ROOF_BEAM_3 62
#define ROOF_BEAM_4 63
#define ROOF_BEAM_3_TOP 64
// KBLT Textures
#define KBLT 65
#define KBLT_EDGE 66
#define KBLT_EDGE_2 67
#define KBLT_EDGE_CORNER 68
#define KBLT_SIDE_1 69
#define KBLT_SIDE_2 70
// Sign and Other Textures
#define NEXUS_SIGN 71
#define NEXUS_SIDE 72
#define SECURITY_SIGN 73
#define SECURITY_SIGN_2 74
#define SIGN_1 75
#define SIGN_1_SIDE_1 76
#define SIGN_1_SIDE_2 77
#define SIGN_2 78
#define SIGN_2_SIDE 79
#define PSC_SIGN 80
#define PSC_SIGN_2 81
#define CO_SIGN 82
#define STA_TRAVEL 83
#define STA_TRAVEL_EDGE 84
#define STA_TRAVEL_BRACKET 85
#define STA_TRAVEL_2 86
#define STA_TRAVEL_BOTTOM 87
#define TOILET_MEN 88
#define TOILET_WOMEN 89
#define GS_SIGN 90
#define GS_SIGN_2 91
#define GS_SIGN_EDGE 92
#define MAP_2 93
#define GLASS_BOARD 94
#define GLASS_BOARD_2 95
#define GLASS_BOARD_3 96
#define GLASS_B_SIDE 97
#define RUSTY_MAN 98
#define NO_SMOKE_SIGN 99
#define CARPET 100
// Drinks Machine Textures
#define DRINKS_SIDE 101
#define DRINKS_TOP 102
#define DRINKS_EDGE 103
#define DRINKS_SIDE_2 104
#define COKE_MACHINE 105
#define COFFEE_MACHINE 106
#define SWEET_MACHINE 107
#define MACHINE_SIDES 108
#define MACHINE_SIDES_2 109
// Telephone Box Textures
#define TELEPHONE_BACK 110
#define TELEPHONE_FRONT 111
#define TELEPHONE_SIDE_1 112
#define TELEPHONE_FRONT_2 113
#define TELEPHONE_MAIN_SIDE 114
#define TELEPHONE_TOP_1 115
#define TELEPHONE_SIDE_2 116
#define TELEPHONE_TOP_2 117
#define TELEPHONE_BOTTOM 118
#define TELEPHONE_FILL 119
#define TELEPHONE_FRONT_3 120
// Step Textures
#define STEPS_LIBRARY 121
#define STEPS_LIBRARY_TOP 122
#define STEP_PAVING_1 123
#define STEP_EDGE 124

// Larger Window and Door Textures Etc
#define WINDOW_1 125
#define WINDOW_2 126
#define WINDOW_3 127
#define WINDOW_4 128
#define WINDOW_5 129
#define WINDOW_6 130
#define WINDOW_7 131
#define WINDOW_8 132
#define WINDOW_9 133
#define WINDOW_10 134
#define WINDOW_11 135
#define WINDOW_12 136
#define WINDOW_13 137
#define WINDOW_14 138
#define WINDOW_14B 139
#define WINDOW_15 140
#define WINDOW_16 141
#define WINDOW_17 142
#define WINDOW_2B 143
#define WINDOW_2C 144
#define WINDOW_2US 145
#define WINDOW_3B 146
#define WINDOW_2USB 147
#define WINDOW_LIB_1 148
#define WINDOW_LIB_1A 149
#define WINDOW_LIB_1B 150
#define WINDOW_LIB_1C 151
#define WINDOW_LIB_US_A 152
#define WINDOW_LIB_US_B 153
#define WINDOW_LIB_DOOR_1 154
#define WINDOW_LIB_DOOR_2 155
#define WINDOW_LIB_LONG 156
#define ENTRANCE 157
#define ENTRANCE_2 158
#define EXIT_EAST 159
#define EXIT_WEST 220
#define CHANC_DOOR_1 160
#define CHANC_DOOR_2 161
#define WINDOW_2D 162
#define WINDOW_2E 163
#define WINDOW_1B 164
#define STEP_WINDOW 221

// Above Window Block Textures
#define ABOVE_WINDOW_BLOCK 165
#define ABOVE_WINDOW_BLOCK_2 166
#define ABOVE_WINDOW_BLOCK_3 167
#define ABOVE_WINDOW_EDGE_3B 168
#define ABOVE_WINDOW_BLOCK_XY_3 169
#define ABOVE_LIB 170
#define ABOVE_UNDER_POSTS 171
#define ABOVE_UNDER_POSTS_2 172
#define ABOVE_WINDOW_UNDER_LIB 173
#define ABOVE_WINDOW_BLOCK_CHANC 174
#define ABOVE_WINDOW_EDGE_3B_LIB 175
#define ABOVE_WINDOW_EDGE_4B_LIB 176
#define ABOVE_UNDER_4B 177
#define ABOVE_CHANC_TEXT 178
#define ABOVE_CHANC_TEXT_2 179
#define ABOVE_PHYS_SCI_TEXT 180
#define ABOVE_CHANC_TEXT_3 181
#define ABOVE_LIB_TEXT 182
#define ABOVE_LIB_TEXT_2 183
#define ABOVE_TICKETS_TEXT 184
#define ABOVE_CHANC_EDGE 185
#define TOILET_DOOR_TOP 186
// Light Fitting Textures
#define LIGHT 187
#define LIGHT_SUPPORT 188
#define LIGHT_SUPPORT_2 189
// Bench Textures
#define BENCH_TOP 190
#define BENCH_SIDE 191
#define BENCH_SIDE_2 192
#define BENCH_EDGE 193
#define BENCH_EDGE_TOP 194
#define BENCH_EDGE_SIDE 195
#define BENCH_EDGE_TOP_2 196
#define BENCH_EDGE_2 197
#define BENCH_EDGE_3 198
// Ticket Counter and Ledge Textures
#define TICKET_COUNTER_TOP 200
#define TICKET_COUNTER_EDGE 201
#define TICKET_COUNTER_EDGE_2 202
#define TICKET_COUNTER_EDGE_3 203
#define TICKET_LEDGE 204
#define TICKET_LEDGE_EDGE 205
#define TICKET_LEDGE_EDGE_2 206
// Wall by Steps Textures
#define WALL_BRICK_STEPS_TOP 207
#define WALL_BRICK_STEPS 208
#define WALL_BRICK_STEPS_COVER 209
#define WALL_BRICK_STEPS_EDGE 210
#define WALL_BRICK_STEPS_EDGE_2 211
// Extra Textures
#define DRAINPIPE 212
#define COUNTER_TOP 213
#define COUNTER_SIDE 214
// Welcome, Exit and Map Screens
#define MAP 217
#define WELCOME 218
#define EXIT 219
#define NO_EXIT 222

//--------------------------------------------------------------------------------------

// USE THESE STTEINGS TO CHANGE SPEED (on different spec computers)
// Set speed (steps)
GLdouble ShaysWorld::movementSpeed = 10.0;
GLdouble ShaysWorld::rotationSpeed = 0.005;

GLdouble ShaysWorld::stepIncrement;
GLdouble ShaysWorld::angleIncrement;
int ShaysWorld::frameCount = 0;
clock_t ShaysWorld::lastClock = 0;

// display campus map
bool ShaysWorld::DisplayMap = false;
// display welcome screen
bool ShaysWorld::DisplayWelcome = true;
// display exit screen
bool ShaysWorld::DisplayExit = false;
// display ECL block
bool ShaysWorld::displayECL = true;

// Stores raw image file
unsigned char* ShaysWorld::image = NULL;

float ShaysWorld::ratio;
int ShaysWorld::width{1920}, ShaysWorld::height{1080};
bool ShaysWorld::lightsOn;
GLdouble ShaysWorld::step, ShaysWorld::step2, ShaysWorld::stepLength;
// GLUquadricObj* ShaysWorld::glu_cylinder;
Camera ShaysWorld::cam;
TexturedPolygons ShaysWorld::tp;

//--------------------------------------------------------------------------------------
//  Initialize Settings
//--------------------------------------------------------------------------------------
void ShaysWorld::myinit(int ourWidth, int ourHeight) {
    // settings for glut cylinders
    // glu_cylinder = gluNewQuadric();
    // gluQuadricTexture(glu_cylinder, GL_TRUE);

    width = ourWidth;
    height = ourHeight;

    // set the world co-ordinates (used to set quadrants for bounding boxes)
    cam.SetWorldCoordinates(36000.0, 43200.0);
    // turn collision detection on
    cam.SetCollisionDetectionOn(true);
    // set starting position of user
    cam.Position(32720.0, 9536.0, 4800.0, 180.0);

    CreatePlanes();

    // creates bounding boxes and places in array
    CreateBoundingBoxes();
    // copies bounding boxes from array to linked lists (one fopr each quadrant)
    // cam.InitiateBoundingBoxes();

    // load texture images and create display lists
    CreateTextureList();
    CreateTextures();
}

//--------------------------------------------------------------------------------------
//  Main Display Function
//--------------------------------------------------------------------------------------
void ShaysWorld::Display() {
    // displays the welcome screen
    if (DisplayWelcome)
        cam.DisplayWelcomeScreen(width, height, 1, tp.GetTexture(WELCOME));
    if (DisplayMap)
        cam.DisplayMap(width, height, tp.GetTexture(MAP));
    // display no exit sign (position check should really be in an object, but
    // didn't have time)
    if (((cam.GetLR() > 35500.0) && (cam.GetFB() < 25344.0))
        || ((cam.GetLR() > 34100.0) && (cam.GetFB() > 41127.0))) {
        cam.DisplayNoExit(width, height, tp.GetTexture(NO_EXIT));
    }

    DrawBackdrop();
}

//--------------------------------------------------------------------------------------
// int key, int x, int y
void ShaysWorld::keys(unsigned char key, int, int) {
    switch (key) {
        // step left
        case 'Z':
        case 'z':
            cam.DirectionLR(-1);
            break;
        // step right
        case 'X':
        case 'x':
            cam.DirectionLR(1);
            break;
        // look up
        case 'Q':
        case 'q':
            cam.DirectionLookUD(1);
            break;
        // look down
        case 'A':
        case 'a':
            cam.DirectionLookUD(-1);
            break;
        // display campus map
        case 'M':
        case 'm':
            DisplayMap = !DisplayMap;
            break;
        // exit tour (escape key)
        case 27: {
            // cam.SetRotateSpeed(0.0f);
            // cam.SetMoveSpeed(0.0f);
            DisplayWelcome = false;
        } break;
        // display welcome page (space key)
        case ' ': {
            if (DisplayWelcome) {
                //  cam.SetRotateSpeed(rotationSpeed);
                //  cam.SetMoveSpeed(movementSpeed);
                DisplayWelcome = false;
            } else {
                //  cam.SetRotateSpeed(0.0f);
                //  cam.SetMoveSpeed(0.0f);
                DisplayWelcome = true;
            }
        } break;
        // display light fittings
        case 'l':
        case 'L': {
            if (lightsOn) {
                lightsOn = false;
            } else {
                lightsOn = true;
            }
        } break;

        case 'P':
        case 'p': {
            // Display ECL Block
            if (displayECL) {
                displayECL = false;
            } else {
                displayECL = true;
            }
        } break;
    }
}

//--------------------------------------------------------------------------------------
// Set up bounding boxes for collsion detection
//--------------------------------------------------------------------------------------
void ShaysWorld::CreateBoundingBoxes() {
    // chanc block
    cam.AddBoundingBox();
    cam.SetAABBMaxX(0, 35879.0);
    cam.SetAABBMinX(0, 33808.0);
    cam.SetAABBMaxZ(0, 22096.0);
    cam.SetAABBMinZ(0, 4688.0);

    // between chanc block and phys sci
    cam.AddBoundingBox();
    cam.SetAABBMaxX(1, 35999.0);
    cam.SetAABBMinX(1, 35730.0);
    cam.SetAABBMaxZ(1, 25344.0);
    cam.SetAABBMinZ(1, 22096.0);

    // phy sci block panel 1
    cam.AddBoundingBox();
    cam.SetAABBMaxX(2, 35879.0);
    cam.SetAABBMinX(2, 33808.0);
    cam.SetAABBMaxZ(2, 26752.0);
    cam.SetAABBMinZ(2, 25344.0);

    // phy sci block 1st doorway
    cam.AddBoundingBox();
    cam.SetAABBMaxX(3, 35879.0);
    cam.SetAABBMinX(3, 34256.0);
    cam.SetAABBMaxZ(3, 27559.0);
    cam.SetAABBMinZ(3, 26752.0);

    // phy sci block 2nd panel
    cam.AddBoundingBox();
    cam.SetAABBMaxX(4, 35879.0);
    cam.SetAABBMinX(4, 33808.0);
    cam.SetAABBMaxZ(4, 36319.0);
    cam.SetAABBMinZ(4, 27559.0);

    // phy sci block 2nd doorway
    cam.AddBoundingBox();
    cam.SetAABBMaxX(5, 35879.0);
    cam.SetAABBMinX(5, 34260.0);
    cam.SetAABBMaxZ(5, 37855.0);
    cam.SetAABBMinZ(5, 36319.0);

    // phy sci block 3rd panel
    cam.AddBoundingBox();
    cam.SetAABBMaxX(6, 35879.0);
    cam.SetAABBMinX(6, 33808.0);
    cam.SetAABBMaxZ(6, 41127.0);
    cam.SetAABBMinZ(6, 37855.0);

    // drinks machine
    cam.AddBoundingBox();
    cam.SetAABBMaxX(7, 35879.0);
    cam.SetAABBMinX(7, 34704.0);
    cam.SetAABBMaxZ(7, 25344.0);
    cam.SetAABBMinZ(7, 24996.0);

    // bottom of steps
    cam.AddBoundingBox();
    cam.SetAABBMaxX(8, 33808.0);
    cam.SetAABBMinX(8, 31556.4);
    cam.SetAABBMaxZ(8, 4688.0);
    cam.SetAABBMinZ(8, 0.0);

    // end of phy sci block exit (top of steps)
    cam.AddBoundingBox();
    cam.SetAABBMaxX(9, 35879.0);
    cam.SetAABBMinX(9, 34320.0);
    cam.SetAABBMaxZ(9, 43056.0);
    cam.SetAABBMinZ(9, 41127.0);

    // library end panel
    cam.AddBoundingBox();
    cam.SetAABBMaxX(10, 34320.0);
    cam.SetAABBMinX(10, 6514.0);
    cam.SetAABBMaxZ(10, 50000.0);
    cam.SetAABBMinZ(10, 43036.0);

    // KBLT
    cam.AddBoundingBox();
    cam.SetAABBMaxX(11, 28104.0);
    cam.SetAABBMinX(11, 25608.0);
    cam.SetAABBMaxZ(11, 43046.0);
    cam.SetAABBMinZ(11, 42754.0);

    // Canteen block
    cam.AddBoundingBox();
    cam.SetAABBMaxX(12, 2608.0);
    cam.SetAABBMinX(12, 0.0);
    cam.SetAABBMaxZ(12, 49046.0);
    cam.SetAABBMinZ(12, -9372.14);

    // Telephones
    cam.AddBoundingBox();
    cam.SetAABBMaxX(13, 33892.0);
    cam.SetAABBMinX(13, 33872.0);
    cam.SetAABBMaxZ(13, 25344.0);
    cam.SetAABBMinZ(13, 25173.0);

    // Telephones
    cam.AddBoundingBox();
    cam.SetAABBMaxX(14, 34277.0);
    cam.SetAABBMinX(14, 34157.0);
    cam.SetAABBMaxZ(14, 25344.0);
    cam.SetAABBMinZ(14, 25173.0);

    // Telephones
    cam.AddBoundingBox();
    cam.SetAABBMaxX(15, 35462.0);
    cam.SetAABBMinX(15, 34541.0);
    cam.SetAABBMaxZ(15, 25344.0);
    cam.SetAABBMinZ(15, 25173.0);

    // Wall by Steps
    cam.AddBoundingBox();
    cam.SetAABBMaxX(16, 31548.0);
    cam.SetAABBMinX(16, 31444.0);
    cam.SetAABBMaxZ(16, 10395.0);
    cam.SetAABBMinZ(16, 4590.0);
}

//--------------------------------------------------------------------------------------
// Set up co-ordinates of different plane
//--------------------------------------------------------------------------------------
void ShaysWorld::CreatePlanes() {
    // flat land (pavement and grass)
    cam.SetPlanes(FLAT_PLANE,
                  2621.81,
                  36000.0,
                  10450.0,
                  10450.0,
                  10000.0,
                  17000.0);
    cam.SetPlanes(FLAT_PLANE,
                  2621.81,
                  6500.0,
                  10450.0,
                  10450.0,
                  17000.0,
                  40000.0);
    cam.SetPlanes(FLAT_PLANE,
                  27000.0,
                  36000.0,
                  10450.0,
                  10450.0,
                  17000.0,
                  40000.0);
    cam.SetPlanes(FLAT_PLANE,
                  2621.81,
                  36000.0,
                  10450.0,
                  10450.0,
                  40000.0,
                  50000.0);

    // top of lower hill
    cam.SetPlanes(FLAT_PLANE,
                  9000.0,
                  22000.0,
                  10650.0,
                  10650.0,
                  19000.0,
                  23000.0);
    cam.SetPlanes(FLAT_PLANE,
                  9000.0,
                  10000.0,
                  10650.0,
                  10650.0,
                  28000.0,
                  33000.0);
    cam.SetPlanes(FLAT_PLANE,
                  9000.0,
                  22000.0,
                  10650.0,
                  10650.0,
                  36000.0,
                  37000.0);
    // sides of lower hill
    cam.SetPlanes(ZY_PLANE,
                  6500.0,
                  27000.0,
                  10450.0,
                  10650.0,
                  17000.0,
                  19000.0);
    cam.SetPlanes(ZY_PLANE,
                  6500.0,
                  27000.0,
                  10650.0,
                  10450.0,
                  37000.0,
                  40000.0);
    cam.SetPlanes(XY_PLANE, 6500.0, 9000.0, 10450.0, 10650.0, 17000.0, 40000.0);
    cam.SetPlanes(XY_PLANE,
                  22000.0,
                  27000.0,
                  10650.0,
                  10450.0,
                  17000.0,
                  40000.0);

    // top of higher hill
    cam.SetPlanes(FLAT_PLANE,
                  14000.0,
                  18000.0,
                  10875.0,
                  108075.0,
                  28000.0,
                  33000.0);
    // sides of higher hill
    cam.SetPlanes(ZY_PLANE,
                  10000.0,
                  22000.0,
                  10650.0,
                  10875.0,
                  23000.0,
                  28000.0);
    cam.SetPlanes(ZY_PLANE,
                  10000.0,
                  22000.0,
                  10875.0,
                  10650.0,
                  33000.0,
                  36000.0);
    cam.SetPlanes(XY_PLANE,
                  10000.0,
                  14000.0,
                  10650.0,
                  10875.0,
                  23000.0,
                  36000.0);
    cam.SetPlanes(XY_PLANE,
                  18000.0,
                  22000.0,
                  10875.0,
                  10650.0,
                  23000.0,
                  36000.0);

    // entance steps
    step = 10450.0;
    stepLength = 9808.0;
    for (int i = 0; i < 20; i++) {
        cam.SetPlanes(FLAT_PLANE,
                      31582.0,
                      33835,
                      step,
                      step,
                      stepLength,
                      stepLength + 42.0);
        if (i == 4 || i == 9 || i == 14) {
            stepLength -= 500.0;
            step -= 48.0;
        } else {
            step -= 48.0;
            stepLength -= 142.0;
        }
    }

    // temp plain to take down to ECL1
    // cam.SetPlanes(ZY_PLANE, 3200.0, 4800.0, 10450.0, 9370.0, 53400.0,
    // 57900.0);
}

//--------------------------------------------------------------------------------------

//--------------------------------------------------------------------------------------
// Load and Create Textures
//--------------------------------------------------------------------------------------
void ShaysWorld::CreateTextures() {
    glEnable(GL_DEPTH_TEST);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

    // set texture count
    tp.SetTextureCount(250);

    // load and create textures
    image = tp.LoadTexture("../res/ShaysWorldData/data/abovechanctext.raw",
                           128,
                           1024);
    tp.CreateTexture(ABOVE_CHANC_TEXT, image, 128, 1024);

    image = tp.LoadTexture("../res/ShaysWorldData/data/abovechanctext2.raw",
                           128,
                           1024);
    tp.CreateTexture(ABOVE_CHANC_TEXT_2, image, 128, 1024);

    image = tp.LoadTexture("../res/ShaysWorldData/data/abovechanctext3.raw",
                           128,
                           1024);
    tp.CreateTexture(ABOVE_CHANC_TEXT_3, image, 128, 1024);

    image = tp.LoadTexture("../res/ShaysWorldData/data/aboveLibText.raw",
                           1024,
                           256);
    tp.CreateTexture(ABOVE_LIB_TEXT, image, 1024, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/aboveLibraryText2.raw",
                           1024,
                           256);
    tp.CreateTexture(ABOVE_LIB_TEXT_2, image, 1024, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/aboveUnder4B.raw",
                           256,
                           128);
    tp.CreateTexture(ABOVE_UNDER_4B, image, 256, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/aboveWindows.raw",
                           128,
                           256);
    tp.CreateTexture(ABOVE_WINDOW_BLOCK, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/aboveWindows2.raw",
                           128,
                           256);
    tp.CreateTexture(ABOVE_WINDOW_BLOCK_2, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/aboveWindowsChanc.raw",
                           128,
                           256);
    tp.CreateTexture(ABOVE_WINDOW_BLOCK_CHANC, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/aboveWindows2posts.raw",
                           128,
                           256);
    tp.CreateTexture(ABOVE_UNDER_POSTS, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/aboveWindows2posts2.raw",
                           128,
                           256);
    tp.CreateTexture(ABOVE_UNDER_POSTS_2, image, 256, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/aboveWindowsLib.raw",
                           256,
                           256);
    tp.CreateTexture(ABOVE_LIB, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/aboveWindows2lib.raw",
                           256,
                           128);
    tp.CreateTexture(ABOVE_WINDOW_UNDER_LIB, image, 256, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/aboveWindows3bricks.raw",
                           256,
                           256);
    tp.CreateTexture(ABOVE_WINDOW_BLOCK_3, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/abovephysscitext.raw",
                           256,
                           1024);
    tp.CreateTexture(ABOVE_PHYS_SCI_TEXT, image, 256, 1024);

    image =
        tp.LoadTexture("../res/ShaysWorldData/data/aboveWindows3bricksXY.raw",
                       256,
                       256);
    tp.CreateTexture(ABOVE_WINDOW_BLOCK_XY_3, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/aboveWindowEdge.raw",
                           128,
                           256);
    tp.CreateTexture(ABOVE_WINDOW_EDGE_3B, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/aboveWindowEdgeLib.raw",
                           256,
                           64);
    tp.CreateTexture(ABOVE_WINDOW_EDGE_3B_LIB, image, 256, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/aboveWindowsLibEdge.raw",
                           256,
                           64);
    tp.CreateTexture(ABOVE_WINDOW_EDGE_4B_LIB, image, 256, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/aboveTicketsText.raw",
                           256,
                           256);
    tp.CreateTexture(ABOVE_TICKETS_TEXT, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/aboveWindowsEdge.raw",
                           128,
                           128);
    tp.CreateTexture(ABOVE_CHANC_EDGE, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/belowrooffill.raw",
                           128,
                           256);
    tp.CreateTexture(BELOW_ROOF_FILL, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/bench.raw", 64, 64);
    tp.CreateTexture(BENCH_TOP, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/benchedgeside.raw",
                           64,
                           64);
    tp.CreateTexture(BENCH_EDGE_SIDE, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/benchedge.raw", 64, 64);
    tp.CreateTexture(BENCH_EDGE, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/benchedgetop.raw",
                           64,
                           64);
    tp.CreateTexture(BENCH_EDGE_TOP, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/benchedge2.raw", 64, 64);
    tp.CreateTexture(BENCH_EDGE_2, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/benchedge3.raw", 64, 64);
    tp.CreateTexture(BENCH_EDGE_3, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/benchedgetop2.raw",
                           64,
                           64);
    tp.CreateTexture(BENCH_EDGE_TOP_2, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/benchside.raw", 64, 64);
    tp.CreateTexture(BENCH_SIDE, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/benchside2.raw", 64, 64);
    tp.CreateTexture(BENCH_SIDE_2, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/bricks1.raw", 128, 128);
    tp.CreateTexture(WALL_BRICK_YZ, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/bricks2.raw", 128, 128);
    tp.CreateTexture(WALL_BRICK_XY, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/bricks2edge.raw",
                           128,
                           128);
    tp.CreateTexture(WALL_BRICK_XY_END, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/bricks1edge.raw",
                           128,
                           128);
    tp.CreateTexture(WALL_BRICK_YZ_END, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/bricks075.raw",
                           128,
                           128);
    tp.CreateTexture(WALL_BRICK_3_4, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/brick87.raw", 128, 128);
    tp.CreateTexture(WALL_BRICK_XY_87WIDTH, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/brickgap.raw", 128, 32);
    tp.CreateTexture(WALL_BRICK_GAP_YZ, image, 128, 32);

    image = tp.LoadTexture("../res/ShaysWorldData/data/brickgap2.raw", 128, 32);
    tp.CreateTexture(WALL_BRICK_GAP2_YZ, image, 128, 32);

    image = tp.LoadTexture("../res/ShaysWorldData/data/bricksecsign.raw",
                           256,
                           128);
    tp.CreateTexture(WALL_BRICK_SEC_SIGN, image, 256, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/brickshadow.raw",
                           128,
                           128);
    tp.CreateTexture(SHADOW_BRICK, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/bricksUSD.raw",
                           128,
                           128);
    tp.CreateTexture(WALL_BRICK_USD_YZ, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/carpet.raw", 32, 32);
    tp.CreateTexture(CARPET, image, 32, 32);

    image = tp.LoadTexture("../res/ShaysWorldData/data/coffeeMachine.raw",
                           128,
                           256);
    tp.CreateTexture(COFFEE_MACHINE, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/cokeMachine.raw",
                           128,
                           256);
    tp.CreateTexture(COKE_MACHINE, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/COsign.raw", 256, 128);
    tp.CreateTexture(CO_SIGN, image, 256, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/counterside.raw", 4, 16);
    tp.CreateTexture(COUNTER_SIDE, image, 4, 16);

    image = tp.LoadTexture("../res/ShaysWorldData/data/countertop.raw", 1, 1);
    tp.CreateTexture(COUNTER_TOP, image, 1, 1);

    image = tp.LoadTexture("../res/ShaysWorldData/data/drainpipe.raw", 32, 2);
    tp.CreateTexture(DRAINPIPE, image, 32, 2);

    image = tp.LoadTexture("../res/ShaysWorldData/data/drinksEdge.raw", 16, 2);
    tp.CreateTexture(DRINKS_EDGE, image, 16, 2);

    image = tp.LoadTexture("../res/ShaysWorldData/data/drinksSide.raw", 64, 64);
    tp.CreateTexture(DRINKS_SIDE, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/drinksSide2.raw",
                           64,
                           64);
    tp.CreateTexture(DRINKS_SIDE_2, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/drinksSidetop.raw",
                           64,
                           64);
    tp.CreateTexture(DRINKS_TOP, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/doorpave1.raw",
                           128,
                           256);
    tp.CreateTexture(DOORPAVE_1, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/doorpost1.raw",
                           1024,
                           128);
    tp.CreateTexture(DOOR_POST_CHANC, image, 1024, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/doorpostSec.raw",
                           1024,
                           128);
    tp.CreateTexture(DOOR_POST_SECURITY, image, 1024, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/doorpostside1.raw",
                           64,
                           1024);
    tp.CreateTexture(DOOR_SIDEPOST_CHANC, image, 64, 1024);

    image = tp.LoadTexture("../res/ShaysWorldData/data/doorPostLibSide.raw",
                           512,
                           64);
    tp.CreateTexture(DOOR_POST_LIB, image, 512, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/glassboard.raw",
                           512,
                           256);
    tp.CreateTexture(GLASS_BOARD, image, 512, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/glassboard2.raw",
                           512,
                           256);
    tp.CreateTexture(GLASS_BOARD_2, image, 512, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/glassboard3.raw",
                           512,
                           256);
    tp.CreateTexture(GLASS_BOARD_3, image, 512, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/glassboardSide.raw",
                           2,
                           16);
    tp.CreateTexture(GLASS_B_SIDE, image, 2, 16);

    image = tp.LoadTexture("../res/ShaysWorldData/data/grass.raw", 64, 64);
    tp.CreateTexture(GRASS, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/grass2.raw", 64, 64);
    tp.CreateTexture(GRASS_2, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/grass3.raw", 64, 64);
    tp.CreateTexture(GRASS_HILL, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/GSsign.raw", 256, 256);
    tp.CreateTexture(GS_SIGN, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/GSsign2.raw", 256, 256);
    tp.CreateTexture(GS_SIGN_2, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/GSsignedge.raw",
                           256,
                           64);
    tp.CreateTexture(GS_SIGN_EDGE, image, 256, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/kbl.raw", 512, 256);
    tp.CreateTexture(KBLT, image, 512, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/KBLTside1.raw", 2, 128);
    tp.CreateTexture(KBLT_SIDE_1, image, 2, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/KBLTside2.raw", 2, 2);
    tp.CreateTexture(KBLT_SIDE_2, image, 2, 2);

    image = tp.LoadTexture("../res/ShaysWorldData/data/kblCorner.raw", 1, 1);
    tp.CreateTexture(KBLT_EDGE_CORNER, image, 1, 1);

    image = tp.LoadTexture("../res/ShaysWorldData/data/kbltEdge.raw", 16, 32);
    tp.CreateTexture(KBLT_EDGE, image, 16, 32);

    image = tp.LoadTexture("../res/ShaysWorldData/data/kbltEdge2.raw", 32, 16);
    tp.CreateTexture(KBLT_EDGE_2, image, 32, 16);

    image = tp.LoadTexture("../res/ShaysWorldData/data/light.raw", 256, 64);
    tp.CreateTexture(LIGHT, image, 256, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/lightsupport.raw", 8, 2);
    tp.CreateTexture(LIGHT_SUPPORT, image, 8, 2);

    image = tp.LoadTexture("../res/ShaysWorldData/data/lightsupport2.raw",
                           2,
                           8);
    tp.CreateTexture(LIGHT_SUPPORT_2, image, 2, 8);

    image = tp.LoadTexture("../res/ShaysWorldData/data/machineSides.raw", 1, 1);
    tp.CreateTexture(MACHINE_SIDES, image, 1, 1);

    image = tp.LoadTexture("../res/ShaysWorldData/data/machineSides2.raw",
                           1,
                           1);
    tp.CreateTexture(MACHINE_SIDES_2, image, 1, 1);

    image = tp.LoadTexture("../res/ShaysWorldData/data/mainPost.raw", 128, 256);
    tp.CreateTexture(MAIN_POST, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/mainPost2.raw",
                           256,
                           128);
    tp.CreateTexture(MAIN_POST_2, image, 256, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/map2.raw", 256, 512);
    tp.CreateTexture(MAP_2, image, 256, 512);

    image = tp.LoadTexture("../res/ShaysWorldData/data/nexus.raw", 512, 256);
    tp.CreateTexture(NEXUS_SIGN, image, 512, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/nexusSide.raw", 2, 16);
    tp.CreateTexture(NEXUS_SIDE, image, 2, 16);

    image = tp.LoadTexture("../res/ShaysWorldData/data/noexit.raw", 256, 64);
    tp.CreateTexture(NO_EXIT, image, 256, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/nosmokesign.raw",
                           256,
                           128);
    tp.CreateTexture(NO_SMOKE_SIGN, image, 256, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/pavement.raw", 128, 64);
    tp.CreateTexture(PAVEMENT, image, 128, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/pavement16.raw", 32, 64);
    tp.CreateTexture(PAVEMENT_16, image, 32, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/pavementflip.raw",
                           128,
                           64);
    tp.CreateTexture(PAVEMENT_FLIP, image, 128, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/pavementcorner1.raw",
                           128,
                           128);
    tp.CreateTexture(PAVEMENT_CORNER_1, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/pavementcorner2.raw",
                           128,
                           128);
    tp.CreateTexture(PAVEMENT_CORNER_2, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/pavementtop.raw",
                           64,
                           128);
    tp.CreateTexture(PAVEMENT_TOP, image, 64, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/pavementtopflip.raw",
                           64,
                           128);
    tp.CreateTexture(PAVEMENT_TOP_FLIP, image, 64, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/pavementSide.raw",
                           64,
                           64);
    tp.CreateTexture(PAVEMENTSIDE_LEFT, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/pavementSide2.raw",
                           64,
                           64);
    tp.CreateTexture(PAVEMENTSIDE_RIGHT, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/pavementSide3.raw",
                           64,
                           64);
    tp.CreateTexture(PAVEMENTSIDE_TOP, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/phonefront.raw",
                           512,
                           32);
    tp.CreateTexture(TELEPHONE_FRONT, image, 512, 32);

    image = tp.LoadTexture("../res/ShaysWorldData/data/phoneside1.raw",
                           32,
                           256);
    tp.CreateTexture(TELEPHONE_SIDE_1, image, 32, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/phonefront2.raw",
                           512,
                           16);
    tp.CreateTexture(TELEPHONE_FRONT_2, image, 512, 16);

    image = tp.LoadTexture("../res/ShaysWorldData/data/phonemainside.raw",
                           512,
                           256);
    tp.CreateTexture(TELEPHONE_MAIN_SIDE, image, 512, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/phonetop1.raw",
                           512,
                           128);
    tp.CreateTexture(TELEPHONE_TOP_1, image, 512, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/phoneside2.raw",
                           16,
                           256);
    tp.CreateTexture(TELEPHONE_SIDE_2, image, 16, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/phonetop2.raw",
                           128,
                           256);
    tp.CreateTexture(TELEPHONE_TOP_2, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/phonebottom.raw",
                           512,
                           128);
    tp.CreateTexture(TELEPHONE_BOTTOM, image, 512, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/phoneFill.raw", 2, 2);
    tp.CreateTexture(TELEPHONE_FILL, image, 2, 2);

    image = tp.LoadTexture("../res/ShaysWorldData/data/phonefront3.raw",
                           16,
                           512);
    tp.CreateTexture(TELEPHONE_FRONT_3, image, 16, 512);

    image = tp.LoadTexture("../res/ShaysWorldData/data/PSCsign.raw", 256, 128);
    tp.CreateTexture(PSC_SIGN, image, 256, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/PSCsign2.raw", 256, 128);
    tp.CreateTexture(PSC_SIGN_2, image, 256, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/purplepost.raw",
                           64,
                           128);
    tp.CreateTexture(PURPLE_POST, image, 64, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/purplepostside.raw",
                           128,
                           64);
    tp.CreateTexture(PURPLE_POSTSIDE, image, 128, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/redpost.raw", 64, 128);
    tp.CreateTexture(RED_POST, image, 64, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/redpostside.raw",
                           64,
                           64);
    tp.CreateTexture(RED_POSTSIDE, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/roofbeam1.raw", 128, 32);
    tp.CreateTexture(ROOF_BEAM_1, image, 128, 32);

    image = tp.LoadTexture("../res/ShaysWorldData/data/roofbeam2.raw", 32, 128);
    tp.CreateTexture(ROOF_BEAM_2, image, 32, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/roofbeam3.raw", 64, 128);
    tp.CreateTexture(ROOF_BEAM_3, image, 64, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/roofbeam3top.raw",
                           128,
                           128);
    tp.CreateTexture(ROOF_BEAM_3_TOP, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/roofbeam4.raw", 128, 64);
    tp.CreateTexture(ROOF_BEAM_4, image, 128, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/roofPlanks.raw",
                           128,
                           128);
    tp.CreateTexture(ROOF_PLANKS, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/roofPlanks2.raw",
                           128,
                           128);
    tp.CreateTexture(ROOF_PLANKS_2, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/rooftop.raw", 2, 128);
    tp.CreateTexture(ROOF_TOP, image, 2, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/rooftoplib.raw", 128, 2);
    tp.CreateTexture(ROOF_TOP_LIB, image, 128, 2);

    image = tp.LoadTexture("../res/ShaysWorldData/data/rustyman.raw",
                           256,
                           1024);
    tp.CreateTexture(RUSTY_MAN, image, 256, 1024);

    image = tp.LoadTexture("../res/ShaysWorldData/data/securitysign1.raw",
                           128,
                           128);
    tp.CreateTexture(SECURITY_SIGN, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/securitysign2.raw",
                           128,
                           128);
    tp.CreateTexture(SECURITY_SIGN_2, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/sign1.raw", 512, 256);
    tp.CreateTexture(SIGN_1, image, 512, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/sign1side1.raw",
                           16,
                           512);
    tp.CreateTexture(SIGN_1_SIDE_1, image, 16, 512);

    image = tp.LoadTexture("../res/ShaysWorldData/data/sign1side2.raw",
                           16,
                           512);
    tp.CreateTexture(SIGN_1_SIDE_2, image, 16, 512);

    image = tp.LoadTexture("../res/ShaysWorldData/data/sign2.raw", 512, 512);
    tp.CreateTexture(SIGN_2, image, 512, 512);

    image = tp.LoadTexture("../res/ShaysWorldData/data/sign2side.raw", 512, 16);
    tp.CreateTexture(SIGN_2_SIDE, image, 512, 16);

    image = tp.LoadTexture("../res/ShaysWorldData/data/statravel.raw",
                           256,
                           256);
    tp.CreateTexture(STA_TRAVEL, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/statraveledge.raw",
                           256,
                           64);
    tp.CreateTexture(STA_TRAVEL_EDGE, image, 256, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/statravelbracket.raw",
                           16,
                           2);
    tp.CreateTexture(STA_TRAVEL_BRACKET, image, 16, 2);

    image = tp.LoadTexture("../res/ShaysWorldData/data/statravel2.raw",
                           256,
                           256);
    tp.CreateTexture(STA_TRAVEL_2, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/statravelbottom.raw",
                           2,
                           64);
    tp.CreateTexture(STA_TRAVEL_BOTTOM, image, 2, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/stepbricks.raw",
                           128,
                           128);
    tp.CreateTexture(WALL_BRICK_STEPS, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/stepbrickscover.raw",
                           64,
                           128);
    tp.CreateTexture(WALL_BRICK_STEPS_COVER, image, 64, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/stepbricksedge.raw",
                           64,
                           32);
    tp.CreateTexture(WALL_BRICK_STEPS_EDGE, image, 64, 32);

    image = tp.LoadTexture("../res/ShaysWorldData/data/stepbricksedge2.raw",
                           64,
                           64);
    tp.CreateTexture(WALL_BRICK_STEPS_EDGE_2, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/stepbrickstop.raw",
                           32,
                           128);
    tp.CreateTexture(WALL_BRICK_STEPS_TOP, image, 32, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/stepslibrary.raw",
                           128,
                           1024);
    tp.CreateTexture(STEPS_LIBRARY, image, 128, 1024);

    image = tp.LoadTexture("../res/ShaysWorldData/data/stepslibrarytop.raw",
                           256,
                           1024);
    tp.CreateTexture(STEPS_LIBRARY_TOP, image, 256, 1024);

    image = tp.LoadTexture("../res/ShaysWorldData/data/steppaving1.raw",
                           1024,
                           512);
    tp.CreateTexture(STEP_PAVING_1, image, 1024, 512);

    image = tp.LoadTexture("../res/ShaysWorldData/data/steppavingedge.raw",
                           64,
                           64);
    tp.CreateTexture(STEP_EDGE, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/sweetMachine.raw",
                           256,
                           256);
    tp.CreateTexture(SWEET_MACHINE, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/telephoneback.raw",
                           512,
                           512);
    tp.CreateTexture(TELEPHONE_BACK, image, 512, 512);

    image = tp.LoadTexture("../res/ShaysWorldData/data/ticketcounteredge2.raw",
                           64,
                           64);
    tp.CreateTexture(TICKET_COUNTER_EDGE_2, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/ticketcounteredge3.raw",
                           64,
                           64);
    tp.CreateTexture(TICKET_COUNTER_EDGE_3, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/ticketcountertop.raw",
                           128,
                           256);
    tp.CreateTexture(TICKET_COUNTER_TOP, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/ticketledgeedge.raw",
                           2,
                           32);
    tp.CreateTexture(TICKET_LEDGE_EDGE, image, 2, 32);

    image = tp.LoadTexture("../res/ShaysWorldData/data/ticketledge.raw",
                           2,
                           128);
    tp.CreateTexture(TICKET_LEDGE, image, 2, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/ticketledgeedge2.raw",
                           32,
                           2);
    tp.CreateTexture(TICKET_LEDGE_EDGE_2, image, 32, 2);

    image = tp.LoadTexture("../res/ShaysWorldData/data/ticketcounteredge.raw",
                           128,
                           32);
    tp.CreateTexture(TICKET_COUNTER_EDGE, image, 128, 32);

    image = tp.LoadTexture("../res/ShaysWorldData/data/toiletdoortop.raw",
                           32,
                           256);
    tp.CreateTexture(TOILET_DOOR_TOP, image, 32, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/toiletmen.raw",
                           128,
                           128);
    tp.CreateTexture(TOILET_MEN, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/toiletwomen.raw",
                           128,
                           128);
    tp.CreateTexture(TOILET_WOMEN, image, 128, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/wallgap1.raw", 8, 128);
    tp.CreateTexture(WALL_GAP_1, image, 8, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowledge1.raw",
                           32,
                           1024);
    tp.CreateTexture(WINDOWLEDGE_CHANC_FRONT, image, 32, 1024);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowledge2.raw",
                           128,
                           1024);
    tp.CreateTexture(WINDOWLEDGE_CHANC_TOP, image, 128, 1024);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowledgeend.raw",
                           32,
                           64);
    tp.CreateTexture(WINDOW_LEDGE_END_1, image, 32, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowledgeend2.raw",
                           64,
                           64);
    tp.CreateTexture(WINDOW_LEDGE_END_2, image, 64, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowledgeLibfa.raw",
                           1024,
                           32);
    tp.CreateTexture(WINDOWLEDGE_LIB_A, image, 1024, 32);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowledgeLibfb.raw",
                           1024,
                           32);
    tp.CreateTexture(WINDOWLEDGE_LIB_B, image, 1024, 32);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowledgeLibta.raw",
                           1024,
                           128);
    tp.CreateTexture(WINDOWLEDGE_LIB_TOP_A, image, 1024, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowledgeLibtb.raw",
                           1024,
                           128);
    tp.CreateTexture(WINDOWLEDGE_LIB_TOP_B, image, 1024, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowledgeUS1.raw",
                           32,
                           1024);
    tp.CreateTexture(WINDOWLEDGE_PS_FRONT, image, 32, 1024);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowledgeUS2.raw",
                           128,
                           1024);
    tp.CreateTexture(WINDOWLEDGE_PS_TOP, image, 128, 1024);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowledgeUS3.raw",
                           128,
                           1024);
    tp.CreateTexture(WINDOWLEDGE_PS_BOTT, image, 128, 1024);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowpost1.raw",
                           1024,
                           128);
    tp.CreateTexture(WINDOWPOST_CHANC_FRONT, image, 1024, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowpostsmall.raw",
                           512,
                           128);
    tp.CreateTexture(WINDOWPOST_PHYSSCI_FRONT, image, 512, 128);

    image =
        tp.LoadTexture("../res/ShaysWorldData/data/windowpostsmallside2.raw",
                       64,
                       512);
    tp.CreateTexture(WINDOWPOST_PHYSSCI_RIGHT, image, 64, 512);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowpostsmallside.raw",
                           64,
                           512);
    tp.CreateTexture(WINDOWPOST_PHYSSCI_LEFT, image, 64, 512);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowpostLib.raw",
                           128,
                           512);
    tp.CreateTexture(WINDOWPOST_LIB_FRONT, image, 128, 512);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowpostLibside1.raw",
                           512,
                           64);
    tp.CreateTexture(WINDOWPOST_LIB_LEFT, image, 512, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowpostLibside2.raw",
                           512,
                           64);
    tp.CreateTexture(WINDOWPOST_LIB_RIGHT, image, 512, 64);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowposthalf1.raw",
                           64,
                           1024);
    tp.CreateTexture(WINDOWPOST_CHANC_RIGHT, image, 64, 1024);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windowposthalf2.raw",
                           64,
                           1024);
    tp.CreateTexture(WINDOWPOST_CHANC_LEFT, image, 64, 1024);

    // Larger Textures

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/stepwindow.raw",
                           128,
                           256);
    tp.CreateTexture(STEP_WINDOW, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/chancDoor1.raw",
                           256,
                           256);
    tp.CreateTexture(CHANC_DOOR_1, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/chancDoor2.raw",
                           256,
                           256);
    tp.CreateTexture(CHANC_DOOR_2, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/entrance.raw",
                           512,
                           256);
    tp.CreateTexture(ENTRANCE, image, 512, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/entrance2.raw",
                           512,
                           512);
    tp.CreateTexture(ENTRANCE_2, image, 512, 512);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/exiteast.raw",
                           512,
                           512);
    tp.CreateTexture(EXIT_EAST, image, 512, 512);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/exitwest.raw",
                           256,
                           512);
    tp.CreateTexture(EXIT_WEST, image, 256, 512);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window1.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_1, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window1b.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_1B, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window2.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_2, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window2b.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_2B, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window2c.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_2C, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window2d.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_2D, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window2e.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_2E, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window2us.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_2US, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window2usb.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_2USB, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window3.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_3, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window3b.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_3B, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window4.raw",
                           128,
                           256);
    tp.CreateTexture(WINDOW_4, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window5.raw",
                           128,
                           256);
    tp.CreateTexture(WINDOW_5, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window6.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_6, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window7.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_7, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window8.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_8, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window9.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_9, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window10.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_10, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window11.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_11, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window12.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_12, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window13.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_13, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window14.raw",
                           256,
                           128);
    tp.CreateTexture(WINDOW_14, image, 256, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window14b.raw",
                           256,
                           128);
    tp.CreateTexture(WINDOW_14B, image, 256, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window15.raw",
                           256,
                           256);
    tp.CreateTexture(WINDOW_15, image, 256, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window16.raw",
                           128,
                           256);
    tp.CreateTexture(WINDOW_16, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/window17.raw",
                           128,
                           256);
    tp.CreateTexture(WINDOW_17, image, 128, 256);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/windowLib1.raw",
                           256,
                           128);
    tp.CreateTexture(WINDOW_LIB_1, image, 256, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/windowLib1a.raw",
                           256,
                           128);
    tp.CreateTexture(WINDOW_LIB_1A, image, 256, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/windowLib1b.raw",
                           256,
                           128);
    tp.CreateTexture(WINDOW_LIB_1B, image, 256, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/windows/windowLib1c.raw",
                           256,
                           128);
    tp.CreateTexture(WINDOW_LIB_1C, image, 256, 128);

    image =
        tp.LoadTexture("../res/ShaysWorldData/data/windows/windowLibUSa.raw",
                       256,
                       128);
    tp.CreateTexture(WINDOW_LIB_US_A, image, 256, 128);

    image =
        tp.LoadTexture("../res/ShaysWorldData/data/windows/windowLibUSb.raw",
                       256,
                       128);
    tp.CreateTexture(WINDOW_LIB_US_B, image, 256, 128);

    image =
        tp.LoadTexture("../res/ShaysWorldData/data/windows/windowLibDoor1.raw",
                       256,
                       256);
    tp.CreateTexture(WINDOW_LIB_DOOR_1, image, 256, 256);

    image =
        tp.LoadTexture("../res/ShaysWorldData/data/windows/windowLibDoor2.raw",
                       512,
                       256);
    tp.CreateTexture(WINDOW_LIB_DOOR_2, image, 512, 256);

    image =
        tp.LoadTexture("../res/ShaysWorldData/data/windows/windowLibLong.raw",
                       256,
                       128);
    tp.CreateTexture(WINDOW_LIB_LONG, image, 256, 128);

    image = tp.LoadTexture("../res/ShaysWorldData/data/map.raw", 256, 256);
    tp.CreateTexture(217, image, 256, 256);
    image = tp.LoadTexture("../res/ShaysWorldData/data/welcome.raw", 512, 512);
    tp.CreateTexture(218, image, 512, 512);
    image = tp.LoadTexture("../res/ShaysWorldData/data/thanks.raw", 512, 512);
    tp.CreateTexture(219, image, 512, 512);

    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}

//--------------------------------------------------------------------------------------
//  Called from the main display function to draw the backdrop (all images)
//--------------------------------------------------------------------------------------
void ShaysWorld::DrawBackdrop() {
    DisplayAboveWindowBlock();
    DisplayBench();
    DisplayBricks();
    DisplayChancPosts();
    DisplayCylinders();
    DisplayDoorPaving();
    DisplayDoorPosts();
    DisplayEntranceSteps();
    DisplayExtras();
    DisplayGrass();
    DisplayLargerTextures();
    DisplayLibraryPosts();
    DisplayMainPosts();
    DisplayPavement();
    DisplayPhysSciPosts();
    DisplayPurplePosts();
    DisplayRedPosts();
    DisplayRoof();
    DisplayStepBricks();
    if (lightsOn)
        DisplayLights();
}

//--------------------------------------------------------------------------------------
// Display the chancellery windoe and door posts
//--------------------------------------------------------------------------------------
void ShaysWorld::DisplayChancPosts() {
    // Windowposts Chanc (downstairs)
    step = 0.0;
    for (size_t i = 0; i < 14; i++) {
        glPushMatrix();
        glTranslated(0.0, 0.0, step);
        if ((i != 1) && (i != 2) && (i != 10) && (i != 11)) {
            glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWPOST_CHANC_FRONT));
            glCallList(11);
        }
        if ((i != 1) && (i != 10)) {
            glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWPOST_CHANC_RIGHT));
            glCallList(12);
        }
        if ((i != 2) && (i != 11)) {
            glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWPOST_CHANC_LEFT));
            glCallList(13);
        }

        glPopMatrix();
        step += 960.0;
    }

    //  Windowledges Chanc (downstairs)
    step = 0.0;
    for (size_t i = 0; i < 11; i++) {
        glPushMatrix();
        glTranslated(0.0, 0.0, step);
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_CHANC_FRONT));
        glCallList(14);

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_CHANC_TOP));
        glCallList(15);
        glPopMatrix();
        if ((i == 0) || (i == 8))
            step += 960.0;
        step += 960.0;
    }

    // Windowposts & Ledges Chanc (upstairs)
    glPushMatrix();
    step = 0.0;
    glTranslatef(0.0, 1023.0, 0.0);
    for (size_t i = 0; i < 14; i++) {
        glTranslated(0.0, 0.0, step);
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWPOST_CHANC_FRONT));
        glCallList(11);

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWPOST_CHANC_RIGHT));
        glCallList(12);

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWPOST_CHANC_LEFT));
        glCallList(13);
        if (i != 13) {
            glBindTexture(GL_TEXTURE_2D,
                          tp.GetTexture(WINDOWLEDGE_CHANC_FRONT));
            glCallList(14);

            glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_CHANC_TOP));
            glCallList(15);
        }
        step = +960.0;
    }
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_LEDGE_END_1));
    glCallList(235);
    glPushMatrix();
    glTranslatef(0.0, 320.0, 7447.0);
    glCallList(235);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 1024.0, 0.0);
    glCallList(235);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 320.0, 5527);
    glCallList(235);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 320.0, 6551);
    glCallList(235);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 320.0, 8471);
    glCallList(235);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 1152.0, 19031.0);
    glCallList(235);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_LEDGE_END_2));
    glCallList(236);
    glCallList(237);
    glPushMatrix();
    glTranslatef(0.0, 0.0, -960.0);
    glCallList(237);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, -8640.0);
    glCallList(237);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, -9600.0);
    glCallList(237);
    glPopMatrix();

    // glPushMatrix();
    // glTranslatef(0.0, 320.0, -9600.0);
    // glCallList(237);
    // glPopMatrix();

    // angled corner of window ledges
    glPushMatrix();
    glTranslatef(0.0, 1024.0, 0.0);
    glCallList(236);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 320.0, 7383.0);
    glCallList(236);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 320.0, 5463);
    glCallList(236);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 320.0, 6551);
    glCallList(236);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 320.0, 8471);
    glCallList(236);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 1152.0, 19031.0);
    glCallList(236);
    glPopMatrix();
}

void ShaysWorld::DrawChancPosts() {
    // Front of Window Post Chanc
    tp.CreateDisplayList(YZ,
                         11,
                         1024.0,
                         128.0,
                         33848.0,
                         10237.0,
                         9505.0,
                         0.586,
                         0.7344);
    // Right side of Window Post Chanc
    tp.CreateDisplayList(XY,
                         12,
                         64.0,
                         1024.0,
                         33848.0,
                         10237.0,
                         9599,
                         0.7344,
                         0.585);
    // Left side of Window Post Chanc
    tp.CreateDisplayList(XY,
                         13,
                         64.0,
                         1024.0,
                         33848.0,
                         10237.0,
                         9505.0,
                         0.7344,
                         0.585);

    // Window ledges of Chanc
    tp.CreateDisplayList(YZ,
                         14,
                         32.0,
                         1024.0,
                         33808.0,
                         10192.0,
                         9552.0,
                         1.0,
                         0.9375);  // front ledge
    glNewList(15, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(33808.0, 10224.0, 9552.0);
    glTexCoord2d(0.0, 0.9375);
    glVertex3d(33808.0, 10224.0, 9552.0 + (1024.0 * 0.9375));
    glTexCoord2d(1.0, 0.9375);
    glVertex3d(33928.0, 10268.0, 9552.0 + (1024.0 * 0.9375));
    glTexCoord2d(1.0, 0.0);
    glVertex3d(33928.0, 10268.0, 9552.0);
    glEnd();
    glEndList();
    tp.CreateDisplayList(YZ,
                         235,
                         32.0,
                         64.0,
                         33808.0,
                         10192.0,
                         22032.0,
                         1.0,
                         1.0);  // front ledge
    tp.CreateDisplayList(XY,
                         236,
                         64.0,
                         64.0,
                         33808.0,
                         10192.0,
                         22096.0,
                         1.35,
                         0.5);  // front ledge

    // Window Edges
    glNewList(237, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(33808.0, 10225.0, 20112.0);
    glTexCoord2d(0.0, 0.5);
    glVertex3d(33808.0, 10192.0, 20112.0);
    glTexCoord2d(0.5, 0.5);
    glVertex3d(33872.0, 10192.0, 20112.0);
    glTexCoord2d(0.5, 0.0);
    glVertex3d(33872.0, 10247.0, 20112.0);
    glEnd();
    glEndList();
}

//--------------------------------------------------------------------------------------
// Display Door Posts
//--------------------------------------------------------------------------------------

void ShaysWorld::DisplayDoorPosts() {
    // Door Posts Chanc
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(DOOR_POST_SECURITY));
    glCallList(199);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(DOOR_POST_CHANC));
    glPushMatrix();
    glTranslatef(0.0, 0.0, 8640.0);
    glCallList(25);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(DOOR_POST_CHANC));
    glCallList(26);
    glPushMatrix();
    glTranslatef(0.0, 0.0, 8640.0);
    glCallList(26);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(DOOR_SIDEPOST_CHANC));
    glCallList(27);
    glPushMatrix();
    glTranslatef(0.0, 0.0, 866.0);
    glCallList(27);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, 8640.0);
    glCallList(27);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, 9506.0);
    glCallList(27);
    glPopMatrix();
}

void ShaysWorld::DrawDoorPosts() {
    // DOORPOSTS_CHANC
    tp.CreateDisplayList(YZ_FLIP,
                         25,
                         1024.0,
                         128.0,
                         33848.0,
                         10000.0,
                         10465.0,
                         0.83,
                         0.7344);  // post
    tp.CreateDisplayList(YZ,
                         26,
                         1024.0,
                         128.0,
                         33848.0,
                         10000.0,
                         11425.0,
                         0.83,
                         0.7344);
    tp.CreateDisplayList(XY,
                         27,
                         64.0,
                         1024.0,
                         33848.0,
                         10000.0,
                         10559.0,
                         1.0,
                         1.0);  // sidepost
    tp.CreateDisplayList(YZ_FLIP,
                         199,
                         1024.0,
                         128.0,
                         33848.0,
                         10000.0,
                         10465.0,
                         0.83,
                         0.7344);  // post
}

//--------------------------------------------------------------------------------------
// Display blocks above Windows and Posts
//--------------------------------------------------------------------------------------
void ShaysWorld::DisplayAboveWindowBlock() {
    // Blocks Above Windows Chanc & Phys Sci
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_WINDOW_BLOCK));
    glCallList(20);
    glCallList(223);
    glCallList(229);
    // Blocks containing text
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_CHANC_TEXT));
    glCallList(224);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_CHANC_TEXT_2));
    glCallList(225);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_CHANC_TEXT_3));
    glCallList(230);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_PHYS_SCI_TEXT));
    glCallList(226);
    glPushMatrix();
    glTranslatef(0.0, 0.0, 9728.0);
    glCallList(226);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_WINDOW_BLOCK_2));
    glCallList(44);
    glCallList(46);
    glCallList(96);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_WINDOW_BLOCK_CHANC));
    glCallList(22);
    glPushMatrix();
    glTranslatef(0.0, 1024.0, 0.0);
    glCallList(22);
    glPopMatrix();
    glCallList(24);
    glPushMatrix();
    glTranslatef(0.0, 1024.0, 0.0);
    glCallList(24);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_WINDOW_BLOCK_3));
    glCallList(227);
    glCallList(228);
    glCallList(21);
    glCallList(23);
    glCallList(95);
    glPushMatrix();
    glTranslated(99.84, 0.0, 0.0);
    glCallList(95);
    glPopMatrix();
    glCallList(231);
    glCallList(43);
    glCallList(45);
    glCallList(53);  // aboves posts
    glPushMatrix();
    glTranslatef(128.0, 0.0, 0.0);
    glCallList(53);
    glPopMatrix();
    glCallList(68);
    glCallList(71);  // above post between chanc and phys sci

    glCallList(213);
    glPushMatrix();
    glTranslatef(0.0, 1024.0, 0.0);
    glCallList(213);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_WINDOW_EDGE_3B));
    glCallList(49);
    glPushMatrix();
    glTranslatef(0.0, 1024.0, 0.0);
    glCallList(49);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 1024.0, 15783.0);
    glCallList(49);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(-2068.0, 310.0, -17244.0);
    glCallList(49);
    glPopMatrix();
    glCallList(425);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_WINDOW_BLOCK_XY_3));
    glCallList(50);
    glPushMatrix();
    glTranslatef(0.0, 0.0, 807.0);
    glCallList(50);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, 9567.0);
    glCallList(50);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, 11103.0);
    glCallList(50);
    glPopMatrix();
    for (int i = 64; i < 67; i++)
        glCallList(i);
    glPushMatrix();
    glTranslatef(0.0, 0.0, 128.0);
    glCallList(66);
    glPopMatrix();
    glCallList(208);
    glCallList(233);
    glCallList(234);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_UNDER_POSTS));
    glCallList(54);
    glCallList(67);
    glCallList(72);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(BELOW_ROOF_FILL));
    glCallList(39);

    // -------------------------------- Above under Mainpost by Library
    // -----------------------
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_UNDER_POSTS_2));
    glCallList(69);
    glCallList(232);

    // -------------------------------- Above Library
    // ------------------------------------
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_LIB));
    for (int i = 55; i < 57; i++)
        glCallList(i);
    glCallList(238);
    glCallList(415);
    glCallList(417);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_WINDOW_UNDER_LIB));
    for (int i = 70; i < 71; i++)
        glCallList(i);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_WINDOW_EDGE_3B_LIB));
    glCallList(209);
    step = 17536.0;
    for (size_t i = 0; i < 2; i++) {
        glPushMatrix();
        glTranslated(step, 0.0, 0.0);
        glCallList(209);
        glPopMatrix();
        step += 128.0;
    }

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_WINDOW_EDGE_4B_LIB));
    glCallList(210);
    step = 17536.0;
    for (size_t i = 0; i < 2; i++) {
        glPushMatrix();
        glTranslated(step, 0.0, 0.0);
        glCallList(210);
        glPopMatrix();
        step += 128.0;
    }

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_UNDER_4B));
    for (int i = 211; i < 213; i++)
        glCallList(i);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_LIB_TEXT));
    glCallList(239);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_LIB_TEXT_2));
    glCallList(416);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_TICKETS_TEXT));
    glCallList(418);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_CHANC_EDGE));
    glCallList(424);
}

void ShaysWorld::DrawAboveWindowBlock() {
    tp.CreateDisplayList(YZ,
                         20,
                         128.0,
                         256.0,
                         33808.0,
                         10832.0,
                         9552.0,
                         1.0,
                         4.0);  // chanc above bottom window
    tp.CreateDisplayList(YZ,
                         223,
                         128.0,
                         256.0,
                         33808.0,
                         10832.0,
                         11600.0,
                         1.0,
                         30.0);  // chanc above bottom window
    tp.CreateDisplayList(YZ,
                         229,
                         128.0,
                         256.0,
                         33808.0,
                         10832.0,
                         20304.0,
                         1.0,
                         3.0);  // chanc above bottom window
    tp.CreateDisplayList(YZ,
                         230,
                         128.0,
                         1024.0,
                         33808.0,
                         10832.0,
                         19280.0,
                         1.0,
                         1.0);  // chanc above bottom window
    tp.CreateDisplayList(YZ,
                         224,
                         128.0,
                         1024.0,
                         33808.0,
                         10832.0,
                         10576.0,
                         1.0,
                         1.0);  // chanc above bottom window
    tp.CreateDisplayList(YZ,
                         225,
                         128.0,
                         1024.0,
                         33808.0,
                         10832.0,
                         21072.0,
                         1.0,
                         1.0);  // chanc above bottom window
    tp.CreateDisplayList(XY,
                         424,
                         128.0,
                         128.0,
                         33808.0,
                         10832.0,
                         22096.0,
                         0.68,
                         1.0);  // chanc end edge downstairs
    tp.CreateDisplayList(XY,
                         425,
                         128.0,
                         256.0,
                         33808.0,
                         11856.0,
                         22096.0,
                         0.68,
                         0.5625);  // 3 bricks high to edge

    tp.CreateDisplayList(YZ,
                         21,
                         256.0,
                         256.0,
                         33808.0,
                         11856.0,
                         9552.0,
                         0.56,
                         49.0);  // chanc above top window chanc
    tp.CreateDisplayList(XZ,
                         22,
                         128.0,
                         256.0,
                         33808.0,
                         10832.0,
                         9552.0,
                         0.70,
                         49.0);  // chanc above under bottom window chanc

    tp.CreateDisplayList(YZ,
                         23,
                         256.0,
                         256.0,
                         33808.0,
                         10832.0,
                         25344.0,
                         0.75,
                         5.0);  // phys sci above bottom window
    tp.CreateDisplayList(YZ,
                         231,
                         256.0,
                         256.0,
                         33808.0,
                         11856.0,
                         25344.0,
                         0.75,
                         61.652);  // phys sci above bottom window

    tp.CreateDisplayList(YZ,
                         226,
                         256.0,
                         1024.0,
                         33808.0,
                         10832.0,
                         26624.0,
                         0.75,
                         1.0);  // phys sci text
    tp.CreateDisplayList(YZ,
                         227,
                         256.0,
                         256.0,
                         33808.0,
                         10832.0,
                         27648.0,
                         0.75,
                         34.0);  // phys sci above bottom window
    tp.CreateDisplayList(YZ,
                         228,
                         256.0,
                         256.0,
                         33808.0,
                         10832.0,
                         37376.0,
                         0.75,
                         14.652);  // phys sci above bottom window
    tp.CreateDisplayList(XZ,
                         24,
                         128.0,
                         256.0,
                         33808.0,
                         10832.0,
                         25344.0,
                         0.78,
                         61.652);  // phys sci above under bottom window

    tp.CreateDisplayList(YZ,
                         95,
                         256.0,
                         256.0,
                         33835.0,
                         11856.0,
                         41127.0,
                         1.0,
                         7.6);  // phys sci above top window
    tp.CreateDisplayList(XZ,
                         96,
                         128.0,
                         256.0,
                         33835.0,
                         11856.0,
                         41127.0,
                         0.78,
                         7.6);  // phys sci above under bottom

    tp.CreateDisplayList(YZ,
                         43,
                         256.0,
                         256.0,
                         34256.0,
                         10832.0,
                         26752.0,
                         0.75,
                         3.25);  // phys sci above 1st door
    tp.CreateDisplayList(XZ,
                         44,
                         128.0,
                         256.0,
                         34256.0,
                         10832.0,
                         26752.0,
                         0.70,
                         2.25);  // phys sci above under 1st door
    tp.CreateDisplayList(YZ,
                         45,
                         256.0,
                         256.0,
                         34256.0,
                         10832.0,
                         36319.0,
                         0.75,
                         6.125);  // phys sci above 2nd door
    tp.CreateDisplayList(XZ,
                         46,
                         128.0,
                         256.0,
                         34256.0,
                         10832.0,
                         36319.0,
                         0.70,
                         6.125);  // phys sci above under 2nd door

    tp.CreateDisplayList(YZ,
                         53,
                         256.0,
                         256.0,
                         31740.0,
                         11142.0,
                         8100.0,
                         0.75,
                         128.955);  // above posts chanc and canteen sides
    tp.CreateDisplayList(XZ,
                         54,
                         128.0,
                         256.0,
                         31740.0,
                         11142.0,
                         8100.0,
                         1.0,
                         128.955);  // above under main posts
    tp.CreateDisplayList(XZ,
                         67,
                         128.0,
                         256.0,
                         35920.0,
                         10832.0,
                         41127.0,
                         1.0,
                         7.6);  // above under steps at end of phys sci
    tp.CreateDisplayList(YZ,
                         68,
                         256.0,
                         256.0,
                         35920.0,
                         10832.0,
                         41127.0,
                         0.75,
                         7.6);  // above steps at end of phys sci
    tp.CreateDisplayList(YZ,
                         39,
                         128.0,
                         256.0,
                         35990.0,
                         11002.0,
                         41127.0,
                         0.75,
                         7.6);  // above steps at end of phys sci (darker back
                                // bit)
    tp.CreateDisplayList(XZ,
                         69,
                         256.0,
                         128.0,
                         4580.0,
                         11142.0,
                         40985.0,
                         106.094,
                         1.0);  // ABOVE_UNDER_POSTS_2 main posts by library
    tp.CreateDisplayList(YZ,
                         71,
                         256.0,
                         256.0,
                         35748.0,
                         11142.0,
                         22096.0,
                         0.75,
                         12.69);  // above post between chanc and phys sci
    tp.CreateDisplayList(XZ,
                         72,
                         128.0,
                         256.0,
                         35748.0,
                         11142.0,
                         22096.0,
                         1.0,
                         12.69);  // above under post between chanc and phys sci

    glNewList(232, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(31768.0 + 45, 11162, 41011.2 - 45);
    glTexCoord2d(10.54, 0.0);
    glVertex3d(33848 + 45, 11920, 43095.2 - 45);
    glTexCoord2d(10.54, 1.0);
    glVertex3d(33848.0 - 45, 11920, 43095.2 + 45);
    glTexCoord2d(0.0, 1.0);
    glVertex3d(31768.0 - 45, 11162, 41011.2 + 45);
    glEnd();
    glEndList();

    glNewList(233, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(31768.0 - 45, 11162, 41011.2 + 45);
    glTexCoord2d(10.54, 0.0);
    glVertex3d(33848 - 45, 11920, 43095.2 + 45);
    glTexCoord2d(10.54, 0.75);
    glVertex3d(33848.0 - 45, 11920 + 192, 43095.2 + 45);
    glTexCoord2d(0.0, 0.75);
    glVertex3d(31768.0 - 45, 11162 + 192, 41011.2 + 45);
    glEnd();
    glEndList();

    glNewList(234, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(31768.0 + 45, 11162, 41011.2 - 45);
    glTexCoord2d(10.54, 0.0);
    glVertex3d(33848 + 45, 11920, 43095.2 - 45);
    glTexCoord2d(10.54, 0.75);
    glVertex3d(33848.0 + 45, 11920 + 192, 43095.2 - 45);
    glTexCoord2d(0.0, 0.75);
    glVertex3d(31768.0 + 45, 11162 + 192, 41011.2 - 45);
    glEnd();
    glEndList();

    // ABOVE_WINDOW_EDGE_3B
    tp.CreateDisplayList(XY,
                         49,
                         128.0,
                         256.0,
                         33808.0,
                         10832.0,
                         25344.0,
                         1.0,
                         0.75);  // 3 bricks high

    // ABOVE_WINDOW_BLOCK_XY_3
    tp.CreateDisplayList(XY,
                         50,
                         256.0,
                         256.0,
                         33888.0,
                         10832.0,
                         26752.0,
                         1.5,
                         1.0);
    tp.CreateDisplayList(XY,
                         64,
                         256.0,
                         256.0,
                         33808.0,
                         10832.0,
                         41127.0,
                         8.5,
                         0.75);  // above end phys sci
    tp.CreateDisplayList(XY,
                         65,
                         256.0,
                         256.0,
                         6600.0,
                         11856.0,
                         43056.0,
                         68.5,
                         0.75);  // top of library
    tp.CreateDisplayList(XY,
                         208,
                         256.0,
                         256.0,
                         24264.0,
                         11856.0,
                         43056.0,
                         38.5,
                         0.75);  // top of library
    tp.CreateDisplayList(XY,
                         66,
                         256.0,
                         256.0,
                         4548.0,
                         11142.0,
                         40985.0,
                         106.72,
                         0.75);  // above library main posts

    // ABOVE_LIB
    tp.CreateDisplayList(XY,
                         239,
                         1024.0,
                         256.0,
                         31504.96,
                         10768.0,
                         43056.0,
                         1.0,
                         1.0);  // (above KBLT)
    tp.CreateDisplayList(XY,
                         238,
                         256.0,
                         256.0,
                         32528.96,
                         10768.0,
                         43056.0,
                         13.75,
                         1.0);  // (above KBLT)
    tp.CreateDisplayList(XY,
                         55,
                         256.0,
                         256.0,
                         24264.0,
                         10768.0,
                         43056.0,
                         28.285,
                         1.0);  // (above KBLT)
    tp.CreateDisplayList(XY,
                         416,
                         1024.0,
                         256.0,
                         9416.0,
                         10768.0,
                         43056.0,
                         1.0,
                         1.0);  // (above library text)
    tp.CreateDisplayList(XY,
                         415,
                         256.0,
                         256.0,
                         10440.0,
                         10768.0,
                         43056.0,
                         49.0,
                         1.0);  // (above library)
    tp.CreateDisplayList(XY,
                         417,
                         256.0,
                         256.0,
                         23240.0,
                         10768.0,
                         43056.0,
                         3.5,
                         1.0);  // (above library)
    tp.CreateDisplayList(XY,
                         418,
                         256.0,
                         256.0,
                         22984.0,
                         10768.0,
                         43056.0,
                         1.0,
                         1.0);  // (above library ticket text)
    tp.CreateDisplayList(XY,
                         56,
                         256.0,
                         256.0,
                         6600.0,
                         10768.0,
                         43056.0,
                         11.0,
                         1.0);  // (above library)
    tp.CreateDisplayList(XZ,
                         70,
                         256.0,
                         128.0,
                         8189.0,
                         11856.0,
                         43056.0,
                         62.3,
                         0.75);  // above under upstairs
    tp.CreateDisplayList(YZ,
                         209,
                         256.0,
                         64.0,
                         6600.0,
                         11856.0,
                         43056.0,
                         1.2,
                         1.0);
    tp.CreateDisplayList(YZ,
                         210,
                         256.0,
                         64.0,
                         6600.0,
                         10768.0,
                         43056.0,
                         1.0,
                         1.0);
    tp.CreateDisplayList(XZ,
                         211,
                         256.0,
                         128.0,
                         8189.0,
                         10768.0,
                         43056.0,
                         62.3,
                         0.75);  // above under downstairs
    tp.CreateDisplayList(XZ,
                         212,
                         256.0,
                         128.0,
                         32720.0,
                         10768.0,
                         43056.0,
                         3.5,
                         0.75);  // above under gcl1

    // ABOVE CANTEEN
    tp.CreateDisplayList(YZ,
                         213,
                         256.0,
                         256.0,
                         2608.0,
                         10896.0,
                         10000.0,
                         0.78,
                         139.25);
}

//--------------------------------------------------------------------------------------
// Display Purple Posts by Guild Shop
//--------------------------------------------------------------------------------------
void ShaysWorld::DisplayPurplePosts() {
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(PURPLE_POST));
    glCallList(29);
    glPushMatrix();
    glTranslatef(0.0, 0.0, 4800.0);
    glCallList(29);
    glPopMatrix();
    glCallList(30);
    glPushMatrix();
    glTranslatef(0.0, 0.0, 960.0);
    glCallList(30);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, 2880.0);
    glCallList(30);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(PURPLE_POSTSIDE));
    glCallList(31);
    glPushMatrix();
    glTranslated(0.0, 0.0, -112.0);
    glCallList(31);
    glPopMatrix();

    step = 865.0;
    for (int i = 0; i < 3; i++) {
        glPushMatrix();
        glTranslated(0.0, 0.0, step);
        glCallList(31);
        glPopMatrix();
        glPushMatrix();
        glTranslated(0.0, 0.0, step + 78.0);
        glCallList(31);
        glPopMatrix();
        step += 960.0;
        if (i == 1)
            step += 960.0;
    }
    glPushMatrix();
    glTranslatef(0.0, 0.0, 4688.0);
    glCallList(31);
    glPopMatrix();
    glCallList(32);
}

void ShaysWorld::DrawPurplePosts() {
    tp.CreateDisplayList(YZ,
                         29,
                         64.0,
                         128.0,
                         33802.0,
                         10000.0,
                         31407.0,
                         13.0,
                         0.875);  // front
    tp.CreateDisplayList(YZ,
                         30,
                         64.0,
                         128.0,
                         33802.0,
                         10000.0,
                         32384.0,
                         13.0,
                         0.61);  // front
    tp.CreateDisplayList(XY,
                         31,
                         128.0,
                         64.0,
                         33802.0,
                         10000.0,
                         31519.0,
                         0.75,
                         13.0);  // side
    tp.CreateDisplayList(XY,
                         32,
                         128.0,
                         64.0,
                         33802.0,
                         10000.0,
                         36319.0,
                         0.58,
                         13.0);  // side
}

//--------------------------------------------------------------------------------------
// Display Red Posts by Sta Travel Shop
//--------------------------------------------------------------------------------------

void ShaysWorld::DisplayRedPosts() {
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(RED_POST));
    glCallList(33);
    glPushMatrix();
    glTranslatef(0.0, 0.0, 1399.0);
    glCallList(33);
    glPopMatrix();
    glCallList(34);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(RED_POSTSIDE));
    glPushMatrix();
    glTranslatef(0.0, 0.0, 240.0);
    glCallList(35);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, 256.0);
    glCallList(35);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, 1639.0);
    glCallList(35);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, 1095.0);
    glCallList(35);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, 1191.0);
    glCallList(35);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, 1655.0);
    glCallList(35);
    glPopMatrix();
}

void ShaysWorld::DrawRedPosts() {
    tp.CreateDisplayList(YZ,
                         33,
                         64.0,
                         128.0,
                         33802.0,
                         10000.0,
                         39200.0,
                         13.0,
                         0.125);  // front
    tp.CreateDisplayList(YZ,
                         34,
                         64.0,
                         128.0,
                         33802.0,
                         10000.0,
                         40055.0,
                         13.0,
                         0.75);  // front
    tp.CreateDisplayList(XY,
                         35,
                         64.0,
                         64.0,
                         33802.0,
                         10000.0,
                         38960.0,
                         1.0,
                         13.0);  // side
}

//--------------------------------------------------------------------------------------
// Display Main Posts
//--------------------------------------------------------------------------------------
void ShaysWorld::DisplayMainPosts() {
    step = 0.0;
    stepLength = 0.0;
    step2 = 0.0;
    for (size_t j = 0; j < 2; j++) {
        glPushMatrix();
        glTranslated(stepLength, 0.0, step2);
        for (int i = 0; i < 17; i++) {
            glBindTexture(GL_TEXTURE_2D, tp.GetTexture(MAIN_POST));
            glPushMatrix();
            glTranslated(0.0, 0.0, step);
            glCallList(18);
            glPopMatrix();
            glPushMatrix();
            glTranslated(0.0, 0.0, step + 128.0);
            glCallList(18);
            glPopMatrix();
            if ((i == 7) && (j == 0))  // between chanc and phys sci
            {
                glPushMatrix();
                glTranslated(4008.0, 0.0, step);
                glCallList(18);
                glPopMatrix();
                glPushMatrix();
                glTranslated(4008.0, 0.0, step + 128.0);
                glCallList(18);
                glPopMatrix();
            }

            glBindTexture(GL_TEXTURE_2D, tp.GetTexture(MAIN_POST_2));
            glPushMatrix();
            glTranslated(0.0, 0.0, step);
            glCallList(19);
            glPopMatrix();
            glPushMatrix();
            glTranslated(128.0, 0.0, step);
            glCallList(19);
            glPopMatrix();
            if ((i == 7) && (j == 0))  // between chanc and phys sci
            {
                glPushMatrix();
                glTranslated(4008.0, 0.0, step);
                glCallList(19);
                glPopMatrix();
            }
            step += 1930.0;
        }
        stepLength -= 27192.0;
        step2 -= 32810.0;
        glPopMatrix();
    }

    // library front
    step = -1940.0;
    for (int i = 0; i < 13; i++) {
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(MAIN_POST));
        glPushMatrix();
        glTranslated(step, 0.0, 30880.0);
        glCallList(18);
        glPopMatrix();
        glPushMatrix();
        glTranslated(step, 0.0, 31008.0);
        glCallList(18);
        glPopMatrix();

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(MAIN_POST_2));
        glPushMatrix();
        glTranslated(step, 0.0, 30880.0);
        glCallList(19);
        glPopMatrix();
        glPushMatrix();
        glTranslated(step + 128.0, 0.0, 30880.0);
        glCallList(19);
        glPopMatrix();
        step -= 1940.0;
    }

    // first on chanc steps
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(MAIN_POST));
    glCallList(51);
    glPushMatrix();
    glTranslatef(0.0, 0.0, 128.0);
    glCallList(51);
    glPopMatrix();
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(MAIN_POST_2));
    glCallList(52);
    glPushMatrix();
    glTranslatef(128.0, 0.0, 0.0);
    glCallList(52);
    glPopMatrix();
}

void ShaysWorld::DrawMainPosts() {
    tp.CreateDisplayList(XY,
                         18,
                         128.0,
                         256.0,
                         31740.0,
                         9995.0,
                         10105.0,
                         1.0,
                         4.48);
    tp.CreateDisplayList(YZ,
                         19,
                         256.0,
                         128.0,
                         31740.0,
                         9995.0,
                         10105.0,
                         4.48,
                         1.0);
    tp.CreateDisplayList(XY,
                         51,
                         128.0,
                         256.0,
                         31740.0,
                         9555.0,
                         8100.0,
                         1.0,
                         6.2);  // 1st by steps
    tp.CreateDisplayList(YZ,
                         52,
                         256.0,
                         128.0,
                         31740.0,
                         9555.0,
                         8100.0,
                         6.2,
                         1.0);  // 1st by steps
}

//--------------------------------------------------------------------------------------
//  Display Window and Door Posts on Phys SCi Building
//--------------------------------------------------------------------------------------
void ShaysWorld::DisplayPhysSciPosts() {
    step = 0.0;
    for (int i = 0; i < 16; i++) {
        glPushMatrix();
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWPOST_PHYSSCI_FRONT));
        glTranslated(0.0, 0.0, step);
        glCallList(36);
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWPOST_PHYSSCI_RIGHT));
        glCallList(37);
        glPopMatrix();
        glPushMatrix();
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWPOST_PHYSSCI_LEFT));
        glTranslated(0.0, 0.0, step + 77);
        glCallList(38);
        glPopMatrix();
        step += 960.0;
    }

    step = 960.0;
    for (size_t i = 0; i < 4; i++) {
        glPushMatrix();
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWPOST_PHYSSCI_FRONT));
        glTranslated(0.0, -1024.0, step);
        glCallList(36);
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWPOST_PHYSSCI_RIGHT));
        glCallList(37);
        glPopMatrix();
        glPushMatrix();
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWPOST_PHYSSCI_LEFT));
        glTranslated(0.0, -1024.0, step + 77);
        glCallList(38);
        glPopMatrix();
        step += 960.0;
    }
    glPushMatrix();
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWPOST_PHYSSCI_FRONT));
    glTranslatef(0.0, -1024.0, 7718.0);
    glCallList(36);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWPOST_PHYSSCI_RIGHT));
    glCallList(37);
    glPopMatrix();
    glPushMatrix();
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWPOST_PHYSSCI_LEFT));
    glTranslatef(0.0, -1024.0, 7718.0 + 77);
    glCallList(38);
    glPopMatrix();

    // WindowLedges Phys Sci (toilets downstairs)
    step = 960.0;
    for (size_t i = 0; i < 2; i++) {
        glPushMatrix();
        glTranslated(0.0, -832.0, step);
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_PS_FRONT));
        glCallList(16);
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_PS_TOP));
        glCallList(17);
        glPopMatrix();
        step += 1920.0;
    }

    step = 6758.0;
    stepLength = -832.0;
    for (size_t i = 0; i < 2; i++) {
        glPushMatrix();
        glTranslated(0.0, stepLength, step);
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_PS_FRONT));
        glCallList(16);
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_PS_TOP));
        if (i == 1)
            glCallList(17);
        glPopMatrix();
        step += 960.0;
        stepLength -= 256.0;
    }
    // shops downstairs phys sci
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_PS_BOTT));
    for (int i = 40; i < 42; i++)
        glCallList(i);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_PS_FRONT));
    glCallList(42);

    // WindowLedges Phys Sci (upstairs)
    step = 0.0;
    for (size_t i = 0; i < 15; i++) {
        glPushMatrix();
        glTranslated(0.0, 0.0, step);
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_PS_FRONT));
        glCallList(16);
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_PS_TOP));
        glCallList(17);
        glPopMatrix();
        step += 960.0;
    }
}

void ShaysWorld::DrawPhysSciPosts() {
    // WINDOWPOST_PS
    tp.CreateDisplayList(YZ,
                         36,
                         512.0,
                         128.0,
                         33848.0,
                         11347.0,
                         26625.0,
                         1.0,
                         0.6016);
    tp.CreateDisplayList(XY,
                         37,
                         64.0,
                         512.0,
                         33848.0,
                         11347.0,
                         26625.0,
                         1.0,
                         1.0);
    tp.CreateDisplayList(XY,
                         38,
                         64.0,
                         512.0,
                         33848.0,
                         11347.0,
                         26625.0,
                         1.0,
                         1.0);

    // WINDOWLEDGE_PS_FRONT & TOP (shorter phys sci ds)
    // first shop
    glNewList(40, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(33808.0, 10544.0, 33421.0);
    glTexCoord2d(0.0, 0.9375);
    glVertex3d(33808.0, 10544.0, 33421.0 + (1024.0 * 0.9375));
    glTexCoord2d(1.0, 0.9375);
    glVertex3d(33928.0, 10588.0, 33421.0 + (1024.0 * 0.9375));
    glTexCoord2d(1.0, 0.0);
    glVertex3d(33928.0, 10588.0, 33421.0);
    glEnd();
    glEndList();

    // small window
    glNewList(41, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(33808.0, 10288.0, 38239.0);
    glTexCoord2d(0.0, 0.315);
    glVertex3d(33808.0, 10288.0, 38239.0 + (1024.0 * 0.315));
    glTexCoord2d(1.0, 0.315);
    glVertex3d(33928.0, 10332.0, 38239.0 + (1024.0 * 0.315));
    glTexCoord2d(1.0, 0.0);
    glVertex3d(33928.0, 10332.0, 38239.0);
    glEnd();
    glEndList();
    tp.CreateDisplayList(YZ,
                         42,
                         32.0,
                         1024.0,
                         33808.0,
                         10256.0,
                         38239.0,
                         1.0,
                         0.315);

    // WINDOWLEDGE_PS_FRONT & TOP
    tp.CreateDisplayList(YZ,
                         16,
                         32.0,
                         1024.0,
                         33808.0,
                         11344.0,
                         26663.0,
                         1.0,
                         0.9375);
    glNewList(17, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3f(33808.0, 11376.0, 26663.0);
    glTexCoord2d(0.0, 0.9375);
    glVertex3f(33808.0, 11376.0, 26663.0 + (1024.0 * 0.9375));
    glTexCoord2d(1.0, 0.9375);
    glVertex3f(33928.0, 11420.0, 26663.0 + (1024.0 * 0.9375));
    glTexCoord2d(1.0, 0.0);
    glVertex3f(33928.0, 11420.0, 26663.0);
    glEnd();
    glEndList();
}

//--------------------------------------------------------------------------------------
//  Display Paving Around Shop Doorway
//--------------------------------------------------------------------------------------
void ShaysWorld::DisplayDoorPaving() {
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(DOORPAVE_1));
    glCallList(47);
    glCallList(48);
}

void ShaysWorld::DrawDoorPaving() {
    tp.CreateDisplayList(XZ,
                         47,
                         128.0,
                         256.0,
                         33808.0,
                         10000.0,
                         31508.0,
                         0.75,
                         7.5);  // phy sci 1st doorway
    tp.CreateDisplayList(XZ,
                         48,
                         128.0,
                         256.0,
                         33808.0,
                         10000.0,
                         35324.0,
                         0.75,
                         3.5);  // phy sci 2nd doorway
}

//--------------------------------------------------------------------------------------
// Display window and door posts of library
//--------------------------------------------------------------------------------------
void ShaysWorld::DisplayLibraryPosts() {
    stepLength = 0.0;
    for (int j = 0; j < 2; j++) {
        glPushMatrix();
        glTranslated(0.0, stepLength, 0.0);
        step = 0.0;
        for (int i = 0; i < 15; i++) {
            if (!(i > 12 && j == 0)) {
                glPushMatrix();
                glBindTexture(GL_TEXTURE_2D,
                              tp.GetTexture(WINDOWPOST_LIB_FRONT));
                glTranslated(step, 0.0, 0.0);
                glCallList(57);
                glBindTexture(GL_TEXTURE_2D,
                              tp.GetTexture(WINDOWPOST_LIB_RIGHT));
                glCallList(58);
                glPopMatrix();
                glPushMatrix();
                glBindTexture(GL_TEXTURE_2D,
                              tp.GetTexture(WINDOWPOST_LIB_LEFT));
                glTranslated(step + 77, 0.0, 0.0);
                glCallList(59);
                glPopMatrix();
                step -= 1088.0;
            }
        }
        glPopMatrix();
        stepLength += 1054;
    }
    stepLength = 0.0;
    for (size_t j = 0; j < 2; j++) {
        glPushMatrix();
        glTranslated(0.0, stepLength, 0.0);
        // WINDOWLEDGE_LIB
        step = 0.0;
        for (int i = 0; i < 13; i++) {
            if (!(i > 10 && j == 0)) {
                glPushMatrix();
                glTranslated(step, 0.0, 0.0);
                glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_LIB_A));
                glCallList(60);
                glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_LIB_B));
                glCallList(61);
                glBindTexture(GL_TEXTURE_2D,
                              tp.GetTexture(WINDOWLEDGE_LIB_TOP_A));
                glCallList(62);
                glBindTexture(GL_TEXTURE_2D,
                              tp.GetTexture(WINDOWLEDGE_LIB_TOP_B));
                glCallList(63);
                glPopMatrix();
            }
            step -= 1088.0;
        }
        glPopMatrix();
        stepLength += 1024;
    }
    // first ledge upstairs
    glPushMatrix();
    glTranslatef(1088.0, 1024.0, 0.0);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_LIB_A));
    glCallList(60);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_LIB_B));
    glCallList(61);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_LIB_TOP_A));
    glCallList(62);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWLEDGE_LIB_TOP_B));
    glCallList(63);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TICKET_COUNTER_TOP));
    glCallList(442);
    glCallList(444);
    glCallList(446);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TICKET_COUNTER_EDGE));
    glCallList(445);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TICKET_COUNTER_EDGE_2));
    glCallList(443);
    glPushMatrix();
    glTranslatef(1152.0, 0.0, 0.0);
    glCallList(443);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TICKET_COUNTER_EDGE_3));
    glCallList(447);
    glPushMatrix();
    glTranslatef(1152.0, 0.0, 0.0);
    glCallList(447);
    glPopMatrix();
}

void ShaysWorld::DrawLibraryPosts() {
    // WINDOWPOST_LIB_FRONT
    tp.CreateDisplayList(XY,
                         57,
                         128.0,
                         512.0,
                         24035.0,
                         10304.0,
                         43096.0,
                         0.6016,
                         1.0);
    tp.CreateDisplayList(YZ,
                         58,
                         512.0,
                         64.0,
                         24035.0,
                         10304.0,
                         43096.0,
                         1.0,
                         1.0);
    tp.CreateDisplayList(YZ,
                         59,
                         512.0,
                         64.0,
                         24035.0,
                         10304.0,
                         43096.0,
                         1.0,
                         1.0);

    // WINDOWLEDGE_LIB
    tp.CreateDisplayList(XY,
                         61,
                         1024.0,
                         32.0,
                         21896.0,
                         10320.0,
                         43056.0,
                         0.5313,
                         1.0);
    tp.CreateDisplayList(XY,
                         60,
                         1024.0,
                         32.0,
                         22440.0,
                         10320.0,
                         43056.0,
                         0.5313,
                         1.0);
    glNewList(62, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(21896.0, 10352.0, 43056.0);
    glTexCoord2d(0.5313, 0.0);
    glVertex3d(21896.0 + (1024.0 * 0.5313), 10352.0, 43056.0);
    glTexCoord2d(0.5313, 1.0);
    glVertex3d(21896.0 + (1024.0 * 0.5313), 10396.0, 43176.0);
    glTexCoord2d(0.0, 1.0);
    glVertex3d(21896.0, 10396.0, 43176.0);
    glEnd();
    glEndList();
    glNewList(63, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(22440.0, 10352.0, 43056.0);
    glTexCoord2d(0.5313, 0.0);
    glVertex3d(22440.0 + (1024.0 * 0.5313), 10352.0, 43056.0);
    glTexCoord2d(0.5313, 1.0);
    glVertex3d(22440.0 + (1024.0 * 0.5313), 10396.0, 43176.0);
    glTexCoord2d(0.0, 1.0);
    glVertex3d(22440.0, 10396.0, 43176.0);
    glEnd();
    glEndList();

    // Ticket Counter
    tp.CreateDisplayList(XZ,
                         442,
                         128.0,
                         256.0,
                         22984.0,
                         10305.0,
                         42992.0,
                         9.0,
                         0.625);
    tp.CreateDisplayList(YZ,
                         443,
                         64.0,
                         64.0,
                         22984.0,
                         10256.0,
                         43056.0,
                         0.766,
                         1.0);
    tp.CreateDisplayList(XY,
                         444,
                         128.0,
                         256.0,
                         22984.0,
                         10256.0,
                         43056.0,
                         9.0,
                         0.1914);

    tp.CreateDisplayList(XY,
                         445,
                         128.0,
                         32.0,
                         22984.0,
                         10286.0,
                         42992.0,
                         9.0,
                         0.59);

    tp.CreateAngledPolygon(446,
                           128.0,
                           256.0,
                           22984.0,
                           24136.0,
                           24136.0,
                           22984.0,
                           10286.0,
                           10286.0,
                           10276.0,
                           10276.0,
                           42992.0,
                           42992.0,
                           43088.0,
                           43088.0,
                           5,
                           1);

    tp.CreateAngledPolygon(447,
                           64.0,
                           64.0,
                           22984.0,
                           22984.0,
                           22984.0,
                           22984.0,
                           10286.0,
                           10276.0,
                           10305.0,
                           10305.0,
                           42992.0,
                           43056.0,
                           43056.0,
                           42992.0,
                           6,
                           1);
}

//--------------------------------------------------------------------------------------
//  Display Pavement
//--------------------------------------------------------------------------------------
void ShaysWorld::DisplayPavement() {
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(PAVEMENT));
    for (int i = 72; i < 74; i++)
        glCallList(i);
    glCallList(28);
    for (int i = 81; i < 89; i++)
        glCallList(i);
    glPushMatrix();
    glTranslatef(0.0, 0.0, 1920.0);
    glCallList(86);
    glPopMatrix();

    for (int i = 247; i < 250; i++)
        glCallList(i);
    glPushMatrix();
    glTranslatef(0.0, 0.0, 8640.0);
    glCallList(248);
    glPopMatrix();
    glCallList(241);
    glCallList(428);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(PAVEMENT_TOP));
    for (int i = 91; i < 93; i++)
        glCallList(i);
    glCallList(246);
    glCallList(243);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(PAVEMENT_TOP_FLIP));
    glCallList(74);
    glCallList(245);
    glCallList(244);
    glCallList(242);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(PAVEMENTSIDE_LEFT));
    glCallList(75);
    glCallList(436);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(PAVEMENTSIDE_RIGHT));
    glCallList(76);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(PAVEMENTSIDE_TOP));
    glCallList(77);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(PAVEMENT));
    glCallList(78);
    glCallList(79);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(PAVEMENT_16));
    glCallList(80);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(PAVEMENT_CORNER_1));
    glCallList(93);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(PAVEMENT_CORNER_2));
    glCallList(94);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(PAVEMENT_FLIP));
    for (int i = 89; i < 91; i++)
        glCallList(i);
    glCallList(240);
    glPushMatrix();
    glTranslatef(-26848.0, 0.0, 0.0);
    glCallList(240);
    glPopMatrix();
}

void ShaysWorld::DrawPavement() {
    // PAVEMENT
    tp.CreateDisplayList(XZ,
                         87,
                         128.0,
                         64.0,
                         2608.0,
                         10000.0,
                         10000.0,
                         17.0,
                         482.5);
    tp.CreateDisplayList(XZ,
                         73,
                         128.0,
                         64.0,
                         31632.0,
                         10000.0,
                         10000.0,
                         17.0,
                         482.5);
    tp.CreateDisplayList(XZ,
                         88,
                         128.0,
                         64.0,
                         33744.0,
                         10000.0,
                         41104.0,
                         4.75,
                         30.5);  // by steps between phys sci and library
    tp.CreateDisplayList(XZ,
                         428,
                         128.0,
                         64.0,
                         34256.0,
                         10000.0,
                         26704.0,
                         1.0,
                         9.5);  // phys sci doorway (behind carpet)
    //

    // PAVEMENT_TOP
    tp.CreateDisplayList(XZ,
                         74,
                         64.0,
                         128.0,
                         4912.0,
                         10000.0,
                         40880.0,
                         416.5,
                         17.0);
    tp.CreateDisplayList(XZ,
                         246,
                         64.0,
                         128.0,
                         32656.0,
                         10000.0,
                         42928.0,
                         15.0,
                         2.0);  // gcl1 door way
    tp.CreateDisplayList(XZ,
                         245,
                         64.0,
                         128.0,
                         24080.0,
                         10000.0,
                         42928.0,
                         3.0,
                         1.5);  // gcl1 door way
    tp.CreateDisplayList(XZ,
                         244,
                         64.0,
                         128.0,
                         8189.0,
                         10000.0,
                         42928.0,
                         44.8,
                         1.80);  // library door way
    tp.CreateDisplayList(XZ,
                         243,
                         64.0,
                         128.0,
                         2576.0,
                         10000.0,
                         42928.0,
                         36.0,
                         21.0);  // entrance to IT block
    tp.CreateDisplayList(XZ,
                         242,
                         64.0,
                         128.0,
                         4848.0,
                         10000.0,
                         42928.0,
                         27.5,
                         21.0);  // entrance to IT block
    tp.CreateDisplayList(XZ,
                         241,
                         128.0,
                         64.0,
                         2096.0,
                         10000.0,
                         41168.0,
                         4.5,
                         29.0);  // entance to psch block
    tp.CreateDisplayList(XZ,
                         240,
                         128.0,
                         64.0,
                         31568.0,
                         10000.0,
                         40816.0,
                         1.0,
                         1.0);  // corner space filler

    // PAVEMENT_JOINS
    glNewList(89, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2f(0.0, 0.0);
    glVertex3f(31568.0, 10000.0, 40816.0);
    glTexCoord2f(17.5, 0.0);
    glVertex3f(33808.0, 10000.0, 40816.0);
    glTexCoord2f(17.5, 35.0);
    glVertex3f(33808.0, 10000.0, 43056.0);
    glTexCoord2f(0.0, 0.0);
    glVertex3f(31568.0, 10000.0, 40816.0);
    glEnd();
    glEndList();
    glNewList(91, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2f(0.0, 0.0);
    glVertex3f(31504.0, 10000.0, 40880.0);
    glTexCoord2f(34.0, 17.0);
    glVertex3f(33680.0, 10000.0, 43056.0);
    glTexCoord2f(34.0, 17.0);
    glVertex3f(33680.0, 10000.0, 43056.0);
    glTexCoord2f(0.0, 17.0);
    glVertex3f(31504.0, 10000.0, 43056.0);
    glEnd();
    glEndList();
    glNewList(93, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2f(0.0, 0.0);
    glVertex3f(31504.0, 10000.0, 40880.0);
    glTexCoord2f(1.0, 0.0);
    glVertex3f(31632.0, 10000.0, 40880.0);
    glTexCoord2f(18.0, 17.0);
    glVertex3f(33808.0, 10000.0, 43056.0);
    glTexCoord2f(17.0, 17.0);
    glVertex3f(33680.0, 10000.0, 43056.0);
    glEnd();
    glEndList();

    glNewList(90, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2f(0.0, 0.0);
    glVertex3f(2608.0, 10000.0, 40816.0);
    glTexCoord2f(17.5, 0.0);
    glVertex3f(4848.0, 10000.0, 40816.0);
    glTexCoord2f(17.5, 0.0);
    glVertex3f(4848.0, 10000.0, 40816.0);
    glTexCoord2f(0.0, 35.0);
    glVertex3f(2608.0, 10000.0, 43056.0);
    glEnd();
    glEndList();

    glNewList(92, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2f(0.0, 0.0);
    glVertex3f(4912.0, 10000.0, 40880.0);
    glTexCoord2f(34.0, 17.0);
    glVertex3f(2736.0, 10000.0, 43056.0);
    glTexCoord2f(34.0, 17.0);
    glVertex3f(2736.0, 10000.0, 43056.0);
    glTexCoord2f(0.0, 17.0);
    glVertex3f(4912.0, 10000.0, 43056.0);
    glEnd();
    glEndList();

    glNewList(94, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2f(17.0, 0.0);
    glVertex3f(4784.0, 10000.0, 40880.0);
    glTexCoord2f(18.0, 0.0);
    glVertex3f(4912.0, 10000.0, 40880.0);
    glTexCoord2f(1.0, 17.0);
    glVertex3f(2736.0, 10000.0, 43056.0);
    glTexCoord2f(0.0, 17.0);
    glVertex3f(2608.0, 10000.0, 43056.0);
    glEnd();
    glEndList();

    // PAVEMENTSIDE_LEFT
    tp.CreateDisplayList(XZ,
                         75,
                         64.0,
                         64.0,
                         31568.0,
                         10000.0,
                         10096.0,
                         1.0,
                         480.0);
    tp.CreateDisplayList(XZ,
                         436,
                         64.0,
                         64.0,
                         31568.0,
                         9086.0,
                         3408.0,
                         1.0,
                         45.0);  // Side paving at entrance
    // PAVEMENTSIDE_RIGHT
    tp.CreateDisplayList(XZ,
                         76,
                         64.0,
                         64.0,
                         4784.0,
                         10000.0,
                         10000.0,
                         1.0,
                         481.5);
    // PAVEMENTSIDE_TOP
    tp.CreateDisplayList(XZ,
                         77,
                         64.0,
                         64.0,
                         4848.0,
                         10000.0,
                         40816.0,
                         417.5,
                         1.0);
    // PAVEMENT_STEPS_CORNER
    tp.CreateDisplayList(XZ,
                         78,
                         128.0,
                         64.0,
                         31568.0,
                         10000.0,
                         10000.0,
                         1.0,
                         1.5);  // corner above chanc steps
    tp.CreateDisplayList(XZ,
                         80,
                         32.0,
                         64.0,
                         31568.0,
                         10000.0,
                         9950.0,
                         70.0,
                         0.797);  // strip along top of chanc steps
    tp.CreateDisplayList(XZ,
                         28,
                         128.0,
                         64.0,
                         33744.0,
                         10000.0,
                         22096.0,
                         17.2,
                         52.0);  // between chanc and phy sci
    tp.CreateDisplayList(XZ,
                         248,
                         128.0,
                         64.0,
                         33744.0,
                         10000.0,
                         10449.0,
                         1.5,
                         16.0);  // doorway to chanc
    tp.CreateDisplayList(XZ,
                         247,
                         128.0,
                         64.0,
                         33744.0,
                         10000.0,
                         39185.0,
                         1.5,
                         23.0);  // doorway to red posts
    tp.CreateDisplayList(XZ,
                         249,
                         128.0,
                         64.0,
                         31632.0,
                         9086.0,
                         3408.0,
                         18.0,
                         45.0);  // entry (bottom of steps)
    tp.CreateDisplayList(XZ,
                         81,
                         128.0,
                         64.0,
                         33744.0,
                         10000.0,
                         26704.0,
                         2.5,
                         11.0);  // phys sci doorway 1
    tp.CreateDisplayList(XZ,
                         82,
                         128.0,
                         64.0,
                         33744.0,
                         10000.0,
                         27344.0,
                         4.5,
                         3.5);  // phys sci doorway 1
    tp.CreateDisplayList(XZ,
                         83,
                         128.0,
                         64.0,
                         33744.0,
                         10000.0,
                         36304.0,
                         5.0,
                         5.3);  // phys sci doorway 2
    tp.CreateDisplayList(XZ,
                         84,
                         128.0,
                         64.0,
                         33744.0,
                         10000.0,
                         36624.0,
                         2.5,
                         9.0);  // phys sci doorway 2
    tp.CreateDisplayList(XZ,
                         85,
                         128.0,
                         64.0,
                         33744.0,
                         10000.0,
                         37200.0,
                         5.0,
                         10.5);  // phys sci doorway 2
    tp.CreateDisplayList(XZ,
                         86,
                         128.0,
                         64.0,
                         33744.0,
                         10000.0,
                         28624.0,
                         2.5,
                         13.5);  // phys sci toilet doorways
}

//--------------------------------------------------------------------------------------
// Display Wall Bricks
//--------------------------------------------------------------------------------------

void ShaysWorld::DisplayBricks() {
    // WALL_BRICK_YZ
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WALL_BRICK_YZ));
    for (int i = 101; i < 111; i++)
        glCallList(i);
    for (int i = 112; i < 126; i++)
        glCallList(i);
    for (int i = 191; i < 195; i++)
        glCallList(i);
    glPushMatrix();
    glTranslatef(0.0, 0.0, 1920.0);
    glCallList(109);
    glCallList(110);
    glCallList(394);
    glPopMatrix();
    glCallList(222);
    glCallList(394);
    glCallList(396);
    glCallList(397);

    // bricks with security sign
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WALL_BRICK_SEC_SIGN));
    glCallList(398);

    // WALL_BRICK_USD_YZ
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WALL_BRICK_USD_YZ));
    for (int i = 200; i < 202; i++)
        glCallList(i);
    glCallList(188);

    // WALL_BRICK_XY
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WALL_BRICK_XY));
    for (int i = 135; i < 165; i++)
        glCallList(i);
    for (int i = 217; i < 222; i++)
        glCallList(i);
    glPushMatrix();
    glTranslatef(0.0, 0.0, -1792.0);
    glCallList(136);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 1024.0, 0.0);
    glCallList(152);
    glPopMatrix();
    for (int i = 195; i < 198; i++)
        glCallList(i);
    glCallList(392);
    for (int i = 430; i < 434; i++)
        glCallList(i);
    // Brick with map on
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(MAP_2));
    glCallList(434);

    // WALL_BRICK_GAP_YZ
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WALL_BRICK_GAP_YZ));
    for (int i = 180; i < 182; i++)
        glCallList(i);
    glPushMatrix();
    glTranslatef(0.0, 1024.0, 0.0);
    glCallList(180);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, -1920.0);
    glCallList(181);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WALL_BRICK_GAP2_YZ));
    glCallList(182);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WALL_GAP_1));
    for (int i = 183; i < 185; i++)
        glCallList(i);

    // WALL_BRICK_XY_END
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WALL_BRICK_XY_END));
    for (int i = 165; i < 168; i++)
        glCallList(i);
    glCallList(134);
    glCallList(185);
    glCallList(187);
    glCallList(399);
    glPushMatrix();
    glTranslatef(-32.0, 0.0, 640.0);
    glCallList(399);
    glPopMatrix();
    step = -832.0;
    for (int i = 0; i < 2; i++) {
        glPushMatrix();
        glTranslated(0.0, 0.0, step);
        glCallList(166);
        glPopMatrix();
        step += 1920;
    }
    glPushMatrix();
    glTranslatef(0.0, 0.0, 321.0);
    glCallList(167);
    glPopMatrix();
    for (int i = 131; i < 132; i++)
        glCallList(i);
    glCallList(132);
    glPushMatrix();
    glTranslatef(0.0, 0.0, 960.0);
    glCallList(132);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, 8640.0);
    glCallList(132);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, 9600.0);
    glCallList(132);
    glPopMatrix();
    glCallList(133);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WALL_BRICK_XY_87WIDTH));
    glCallList(130);
    glCallList(186);

    // WALL_BRICK_YZ_END
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WALL_BRICK_YZ_END));
    for (int i = 126; i < 130; i++)
        glCallList(i);
    glPushMatrix();
    glTranslatef(-896.0, 0.0, 0.0);
    glCallList(128);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 1088.0, 0.0);
    glCallList(129);
    glCallList(168);
    glPopMatrix();
    for (int i = 168; i < 170; i++)
        glCallList(i);
    glCallList(390);
    glCallList(391);
    glCallList(393);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WALL_BRICK_3_4));
    glCallList(189);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(SHADOW_BRICK));
    glCallList(190);
}

void ShaysWorld::DrawBricks() {
    // WALL_BRICK_YZ
    // --------  (Face of Cancerllary Building) --------
    tp.CreateDisplayList(YZ,
                         101,
                         128.0,
                         128.0,
                         33808.0,
                         9872.0,
                         9552.0,
                         2.5,
                         7.5);  // panel 1 (above steps)
    tp.CreateDisplayList(YZ,
                         222,
                         128.0,
                         128.0,
                         33840.0,
                         8976.0,
                         5840.0,
                         23.625,
                         5.0);  // panel 1 (before steps)
    tp.CreateDisplayList(YZ,
                         102,
                         128.0,
                         128.0,
                         33808.0,
                         8976.0,
                         6480.0,
                         23.625,
                         24.0);  // panel 2 (below steps)
    tp.CreateDisplayList(YZ,
                         103,
                         128.0,
                         128.0,
                         33808.0,
                         10000.0,
                         11472.0,
                         1.5,
                         60.0);  // panel 3 (below window 1)
    tp.CreateDisplayList(YZ,
                         104,
                         128.0,
                         128.0,
                         33808.0,
                         10000.0,
                         20112.0,
                         1.5,
                         15.5);  // panel 4 (below window 2)
    tp.CreateDisplayList(YZ_FLIP,
                         105,
                         128.0,
                         128.0,
                         33808.0,
                         10960.0,
                         9552.0,
                         2.0,
                         97.5);  // us panel 4
    tp.CreateDisplayList(YZ,
                         120,
                         128.0,
                         128.0,
                         33808.0,
                         10960.0,
                         22032.0,
                         2.0,
                         0.5);  // us panel 4 (last 1/2 brick)

    // -------- (Face of Physical Science/Shops Block) --------
    tp.CreateDisplayList(YZ,
                         106,
                         128.0,
                         128.0,
                         33808.0,
                         10000.0,
                         25344.0,
                         4.525,
                         11.0);  // panel 1 (around rusty man)
    tp.CreateDisplayList(YZ,
                         107,
                         128.0,
                         128.0,
                         33808.0,
                         11024.0,
                         25344.0,
                         6.5,
                         10.0);  // us panel 1
    tp.CreateDisplayList(YZ,
                         108,
                         128.0,
                         128.0,
                         33808.0,
                         11024.0,
                         26624.0,
                         2.5,
                         113.305);  // us panel 2
    tp.CreateDisplayList(YZ,
                         109,
                         128.0,
                         128.0,
                         33808.0,
                         10000.0,
                         27559.0,
                         3.5,
                         8.5);  // panel 3 (toilets window)
    tp.CreateDisplayList(YZ,
                         394,
                         128.0,
                         128.0,
                         33808.0,
                         10384.0,
                         27559.0,
                         1.0,
                         7.5);  // panel 3 (toilets window)
    tp.CreateDisplayList(YZ,
                         110,
                         128.0,
                         128.0,
                         33872.0,
                         9936.0,
                         28967.0,
                         6.5,
                         4.5);  // panel 4 (toilets door)
    tp.CreateDisplayList(YZ,
                         112,
                         128.0,
                         128.0,
                         33808.0,
                         10000.0,
                         33422.0,
                         2.0,
                         14.4);  // panel 5 (booth)
    tp.CreateDisplayList(YZ,
                         113,
                         128.0,
                         128.0,
                         33808.0,
                         10128.0,
                         33422.0,
                         3.0,
                         5.5);  // panel 5 (booth below window)
    tp.CreateDisplayList(YZ,
                         188,
                         128.0,
                         128.0,
                         33808.0,
                         10128.0,
                         34254.0,
                         3.0,
                         1.0);  // panel 5 (booth below window)
    tp.CreateDisplayList(YZ,
                         115,
                         128.0,
                         128.0,
                         34260.0,
                         10000.0,
                         36319.0,
                         2.5,
                         2.5);  // panel 6 (phys sci doorway)
    tp.CreateDisplayList(YZ,
                         191,
                         128.0,
                         128.0,
                         34260.0,
                         10256.0,
                         36319.0,
                         4.5,
                         1.5);  // panel 6 (phys sci doorway)
    tp.CreateDisplayList(YZ,
                         192,
                         128.0,
                         128.0,
                         34260.0,
                         10576.0,
                         36383.0,
                         2.0,
                         2.0);  // panel 6 (phys sci doorway)
    tp.CreateDisplayList(YZ,
                         114,
                         128.0,
                         128.0,
                         33808.0,
                         10000.0,
                         37855.0,
                         2.05,
                         10.51);  // panel 7 (with window)
    tp.CreateDisplayList(YZ,
                         116,
                         128.0,
                         128.0,
                         33808.0,
                         10128.0,
                         37855.0,
                         5.5,
                         1.05);  // panel 7 (with window)
    tp.CreateDisplayList(YZ,
                         396,
                         128.0,
                         128.0,
                         33808.0,
                         10128.0,
                         38111.0,
                         5.5,
                         1.0);  // panel 7 (with window)
    tp.CreateDisplayList(YZ,
                         397,
                         128.0,
                         128.0,
                         33808.0,
                         10512.0,
                         37855.0,
                         2.5,
                         3.0);  // panel 7 (with window)
    tp.CreateDisplayList(YZ,
                         398,
                         256.0,
                         128.0,
                         33808.0,
                         10256.0,
                         37983.0,
                         1.05,
                         1.1);  // panel 7 (with sign)
    tp.CreateDisplayList(YZ_FLIP,
                         117,
                         128.0,
                         128.0,
                         33808.0,
                         10128.0,
                         38560.0,
                         5.5,
                         0.5);  // panel 7 (with window)
    tp.CreateDisplayList(YZ,
                         118,
                         128.0,
                         128.0,
                         33808.0,
                         10128.0,
                         38624.0,
                         5.5,
                         4.5);  // panel 7 (with window)
    tp.CreateDisplayList(YZ,
                         119,
                         128.0,
                         128.0,
                         33808.0,
                         10000.0,
                         40615.0,
                         6.5,
                         4.0);  // panel 8 (end panel)
    tp.CreateDisplayList(YZ,
                         121,
                         128.0,
                         128.0,
                         34256.0,
                         9936.0,
                         27303.0,
                         3.0,
                         2.0);  // first doorway panel
    tp.CreateDisplayList(YZ,
                         193,
                         128.0,
                         128.0,
                         34256.0,
                         10576.0,
                         27303.0,
                         2.0,
                         2.0);  // first doorway panel
    tp.CreateDisplayList(YZ,
                         194,
                         128.0,
                         128.0,
                         34256.0,
                         10192.0,
                         27431.0,
                         3.5,
                         1.0);  // first doorway panel

    // -------- (Face of Canteen Block) --------
    tp.CreateDisplayList(YZ,
                         122,
                         128.0,
                         128.0,
                         2608.0,
                         10000.0,
                         10000.0,
                         7.0,
                         243.5);  // long downstairs panel
    tp.CreateDisplayList(YZ,
                         123,
                         128.0,
                         128.0,
                         2608.0,
                         10000.0,
                         42960.0,
                         7.0,
                         21.0);  // end downstairs panel
    tp.CreateDisplayList(YZ,
                         124,
                         128.0,
                         128.0,
                         2608.0,
                         11088.0,
                         10000.0,
                         7.0,
                         278.5);  // long upstairs panel
    tp.CreateDisplayList(XY,
                         136,
                         128.0,
                         128.0,
                         2096.0,
                         10000.0,
                         42960.0,
                         4.0,
                         7.0);  // corner exit to psc block from canteen

    // WALL_BRICK_USD_YZ
    tp.CreateDisplayList(YZ,
                         200,
                         128.0,
                         128.0,
                         33808.0,
                         10576.0,
                         25344.0,
                         2.0,
                         1.0);  // panel 1 (around rusty man)
    tp.CreateDisplayList(YZ,
                         201,
                         128.0,
                         128.0,
                         33808.0,
                         10576.0,
                         26496.0,
                         2.0,
                         2.0);  // panel 1 (around rusty man)

    // WALL_BRICK_XY
    // --------  (Cancerllary Building) --------
    tp.CreateDisplayList(XY,
                         399,
                         128.0,
                         128.0,
                         33840.0,
                         8976.0,
                         5840.0,
                         0.5,
                         23.625);  // first corner edge (bottom of steps)
    tp.CreateDisplayList(XY,
                         130,
                         128.0,
                         128.0,
                         33808.0,
                         10960.0,
                         22096.0,
                         0.68,
                         2.0);  // below us window (end wall)
    tp.CreateDisplayList(XY,
                         131,
                         128.0,
                         128.0,
                         33808.0,
                         10192.0,
                         9552.0,
                         0.68,
                         15.5);  // above steps
    tp.CreateDisplayList(XY,
                         132,
                         128.0,
                         128.0,
                         33808.0,
                         10000.0,
                         10512.0,
                         0.68,
                         1.5);  // first door (others)
    tp.CreateDisplayList(XY,
                         133,
                         128.0,
                         128.0,
                         33808.0,
                         11344.0,
                         26624.0,
                         0.68,
                         4.0);  // next us window phys sci
    tp.CreateDisplayList(XY,
                         143,
                         128.0,
                         128.0,
                         33895.0,
                         10000.0,
                         22096.0,
                         15.5,
                         16.0);  // end wall
    tp.CreateDisplayList(XY,
                         186,
                         128.0,
                         128.0,
                         33808.0,
                         10000.0,
                         22096.0,
                         0.68,
                         1.5);  // end wall
    // --------  (Phys Science Block) -------
    tp.CreateDisplayList(XY,
                         197,
                         128.0,
                         128.0,
                         33808.0,
                         10640.0,
                         25344.0,
                         1.5,
                         1.5);  // end wall above telephones
    tp.CreateDisplayList(XY,
                         196,
                         128.0,
                         128.0,
                         33936.0,
                         10640.0,
                         25344.0,
                         6.0,
                         1.505);  // end wall above telephones
    tp.CreateDisplayList(XY,
                         195,
                         128.0,
                         128.0,
                         34576.0,
                         10128.0,
                         25344.0,
                         1.0,
                         6.5);  // next to telephones
    tp.CreateDisplayList(XY,
                         190,
                         128.0,
                         128.0,
                         34704.0,
                         10000.0,
                         25344.0,
                         9.5,
                         5.75);  // end wall behind drinks machine
    tp.CreateDisplayList(XY,
                         189,
                         128.0,
                         128.0,
                         34704.0,
                         10736.0,
                         25344.0,
                         9.5,
                         0.75);  // end wall above drinks machine
    tp.CreateDisplayList(XY,
                         144,
                         128.0,
                         128.0,
                         33808.0,
                         10000.0,
                         25344.0,
                         7.0,
                         1.6);  // end wall
    tp.CreateDisplayList(XY,
                         145,
                         128.0,
                         128.0,
                         33876.0,
                         9936.0,
                         36319.0,
                         3.0,
                         7.0);  // ps 2nd door(leftside entrance)
    tp.CreateDisplayList(XY,
                         146,
                         128.0,
                         128.0,
                         33808.0,
                         9936.0,
                         37855.0,
                         4.25,
                         7.0);  // ps 2nd door(rightside entrance)
    tp.CreateDisplayList(XY,
                         147,
                         128.0,
                         128.0,
                         33808.0,
                         9936.0,
                         26752,
                         4.0,
                         7.0);  // ps first door (left bottom)
    tp.CreateDisplayList(XY,
                         148,
                         128.0,
                         128.0,
                         33808.0,
                         9936.0,
                         27559.0,
                         3.5,
                         4.5);  // ps first door (right bottom)
    tp.CreateDisplayList(XY,
                         149,
                         128.0,
                         128.0,
                         33872.0,
                         10384.0,
                         27559.0,
                         3.0,
                         3.5);  // ps first door (right top)
    tp.CreateDisplayList(XY,
                         185,
                         128.0,
                         128.0,
                         34256.0,
                         10000.0,
                         27303.0,
                         0.5,
                         6.5);  // ps first door (1/2 inner brick)
    tp.CreateDisplayList(XY,
                         166,
                         128.0,
                         128.0,
                         33808.0,
                         10000.0,
                         29479.0,
                         0.5,
                         4.0);  // side of toilet doors phys sci
    tp.CreateDisplayList(XY,
                         167,
                         128.0,
                         128.0,
                         33808.0,
                         10256.0,
                         38239.0,
                         0.75,
                         4.5);  // side of small window phys sci
    tp.CreateDisplayList(XY_FLIP,
                         152,
                         128.0,
                         128.0,
                         33936.0,
                         10832.0,
                         25344.0,
                         15.5,
                         2.5);  // end wall panel 2 phys sci
    tp.CreateDisplayList(XY,
                         153,
                         128.0,
                         128.0,
                         33808.0,
                         11024.0,
                         25344.0,
                         17.5,
                         6.5);  // end wall panel 3 phys sci
    tp.CreateDisplayList(XY,
                         165,
                         128.0,
                         128.0,
                         34260.0,
                         10000.0,
                         36639.0,
                         0.7,
                         6.5);  // ps 2nd door(inner 1/2 brick)
    tp.CreateDisplayList(XY,
                         187,
                         128.0,
                         128.0,
                         33808.0,
                         10256.0,
                         34382.0,
                         0.5,
                         2.0);  // side of toilet doors phys sci

    // --------  (Library Block) --------
    tp.CreateDisplayList(XY,
                         154,
                         128.0,
                         128.0,
                         33616.0,
                         10000.0,
                         43056.0,
                         19.0,
                         6.0);  // first panel
    tp.CreateDisplayList(XY,
                         155,
                         128.0,
                         128.0,
                         30800.0,
                         10000.0,
                         43056.0,
                         15.0,
                         6.0);  // 2nd panel
    tp.CreateDisplayList(XY,
                         156,
                         128.0,
                         128.0,
                         27976.0,
                         9936.0,
                         43056.0,
                         12.0,
                         3.0);  // 3rd panel (next to KBLT)
    tp.CreateDisplayList(XY,
                         217,
                         128.0,
                         128.0,
                         29512.0,
                         9936.0,
                         43056.0,
                         10.0,
                         2.75);  // 3rd panel (below nexus sign)
    tp.CreateDisplayList(XY,
                         157,
                         128.0,
                         128.0,
                         24264.0,
                         10256.0,
                         43056.0,
                         1.5,
                         4.0);  // 4th panel (next to KBLT)
    tp.CreateDisplayList(XY,
                         218,
                         128.0,
                         128.0,
                         24264.0,
                         10000.0,
                         43056.0,
                         11.5,
                         2.5);  // around glass boards
    tp.CreateDisplayList(XY,
                         219,
                         128.0,
                         128.0,
                         25352.0,
                         10192.0,
                         43056.0,
                         3.0,
                         4.5);  // around glass boards
    tp.CreateDisplayList(XY,
                         220,
                         128.0,
                         128.0,
                         27976.0,
                         10192.0,
                         43056.0,
                         3.0,
                         4.5);  // around glass boards
    tp.CreateDisplayList(XY,
                         221,
                         128.0,
                         128.0,
                         29256.0,
                         10192.0,
                         43056.0,
                         2.0,
                         4.5);  // around glass boards
    tp.CreateDisplayList(XY,
                         158,
                         128.0,
                         128.0,
                         30800.0,
                         11024.0,
                         43056.0,
                         41.0,
                         6.5);  // US 1st panel
    tp.CreateDisplayList(XY,
                         159,
                         128.0,
                         128.0,
                         24264.0,
                         11024.0,
                         43056.0,
                         51.0,
                         6.5);  // US 2nd panel
    tp.CreateDisplayList(XY,
                         160,
                         128.0,
                         128.0,
                         22984.0,
                         10000.0,
                         43056.0,
                         9.0,
                         2.0);  // US 3rd panel (start of ds library)
    tp.CreateDisplayList(XY,
                         161,
                         128.0,
                         128.0,
                         10952.0,
                         10000.0,
                         43056.0,
                         94.0,
                         2.5);  // US 4th panel (under of ds library)
    tp.CreateDisplayList(XY,
                         162,
                         128.0,
                         128.0,
                         6600.0,
                         11024.0,
                         43056.0,
                         137.0,
                         2.5);  // US 4th panel (under of ds library)
    tp.CreateXtoYWindowList(434,
                            43056.0,
                            6856.0,
                            256.0,
                            10256.0,
                            512.0,
                            1.0,
                            1.0);  // End of DS (Map)
    tp.CreateDisplayList(XY,
                         433,
                         128.0,
                         128.0,
                         7112.0,
                         10640.0,
                         43056.0,
                         8.0,
                         1.0);  // End DS
    tp.CreateDisplayList(XY,
                         432,
                         128.0,
                         128.0,
                         7112.0,
                         10128.0,
                         43056.0,
                         1.5,
                         5.0);  // End DS
    tp.CreateDisplayList(XY,
                         431,
                         128.0,
                         128.0,
                         8072.0,
                         10064.0,
                         43056.0,
                         0.914,
                         5.5);  // End DS
    tp.CreateDisplayList(XY,
                         430,
                         128.0,
                         128.0,
                         6600.0,
                         10128.0,
                         43056.0,
                         2.0,
                         5.0);  // End DS
    tp.CreateDisplayList(XY,
                         163,
                         128.0,
                         128.0,
                         6600.0,
                         10000.0,
                         43056.0,
                         12.414,
                         2.0);  // End DS
    tp.CreateDisplayList(XY,
                         164,
                         128.0,
                         128.0,
                         6600.0,
                         11024.0,
                         43056.0,
                         17.29,
                         6.5);  // End US
    tp.CreateDisplayList(YZ,
                         126,
                         128.0,
                         128.0,
                         6600.0,
                         10000.0,
                         43056.0,
                         6.0,
                         0.5);  // end panel corner
    tp.CreateDisplayList(YZ,
                         125,
                         128.0,
                         128.0,
                         6514.0,
                         10000.0,
                         43120.0,
                         14.5,
                         20.5);  // end panel
    tp.CreateDisplayList(YZ,
                         127,
                         128.0,
                         128.0,
                         6600.0,
                         11024.0,
                         43056.0,
                         6.5,
                         0.5);  // end panel top
    tp.CreateDisplayList(YZ,
                         128,
                         128.0,
                         128.0,
                         33616.0,
                         9936.0,
                         43056.0,
                         6.5,
                         0.75);  // cgl1 side panel
    tp.CreateDisplayList(YZ,
                         129,
                         128.0,
                         128.0,
                         24264.0,
                         9936.0,
                         43056.0,
                         6.5,
                         0.5);  // gap in middle of library
    tp.CreateDisplayList(YZ,
                         168,
                         128.0,
                         128.0,
                         24136.0,
                         9936.0,
                         43056.0,
                         2.5,
                         0.5);  // gap in middle of library
    tp.CreateDisplayList(YZ,
                         169,
                         128.0,
                         128.0,
                         8813.12,
                         11344.0,
                         43056.0,
                         4.0,
                         0.5);  // edge of first us window post
    tp.CreateDisplayList(XY,
                         135,
                         128.0,
                         128.0,
                         24072.0,
                         10000.0,
                         43120.0,
                         1.5,
                         17.0);  // middle of gap
    tp.CreateDisplayList(XY,
                         134,
                         128.0,
                         128.0,
                         6514.0,
                         10000.0,
                         43120.0,
                         0.75,
                         14.5);  // end corner
    tp.CreateDisplayList(XY,
                         141,
                         128.0,
                         128.0,
                         33104.0,
                         10000.0,
                         43152.0,
                         1.0,
                         6.0);  // brick between gcl1 doors
    tp.CreateDisplayList(XY,
                         140,
                         128.0,
                         128.0,
                         34448.0,
                         9424.0,
                         43056.0,
                         12.5,
                         4.5);  // end below stairs
    tp.CreateDisplayList(YZ,
                         390,
                         128.0,
                         128.0,
                         10952.0,
                         10000.0,
                         43056.0,
                         2.5,
                         0.75);  // side of library door
    tp.CreateDisplayList(YZ,
                         391,
                         128.0,
                         128.0,
                         8189.0,
                         10000.0,
                         43056.0,
                         6.0,
                         0.5);  // side of library door
    tp.CreateDisplayList(XY,
                         392,
                         128.0,
                         128.0,
                         10952.0,
                         10320.0,
                         43152.0,
                         0.25,
                         3.5);  // side edge of library door

    // --------  (Phys Sci Building very end wall by steps) --------
    tp.CreateDisplayList(XY,
                         142,
                         128.0,
                         128.0,
                         33808.0,
                         10000.0,
                         41127.0,
                         11.5,
                         6.5);
    tp.CreateDisplayList(XY,
                         150,
                         128.0,
                         128.0,
                         33808.0,
                         11024.0,
                         41127.0,
                         16.5,
                         2.5);
    tp.CreateDisplayList(XY,
                         151,
                         128.0,
                         128.0,
                         34448.0,
                         9360.0,
                         41127.0,
                         6.5,
                         5.5);  // below window
    tp.CreateDisplayList(XY,
                         137,
                         128.0,
                         128.0,
                         35280.0,
                         9296.0,
                         41127.0,
                         6.0,
                         6.5);  // below window
    tp.CreateDisplayList(XY,
                         138,
                         128.0,
                         128.0,
                         35600.0,
                         10000.0,
                         41127.0,
                         3.5,
                         6.5);
    tp.CreateDisplayList(XY,
                         139,
                         128.0,
                         128.0,
                         33872.0,
                         11216.0,
                         41127.0,
                         12.5,
                         6.0);
    tp.CreateDisplayList(YZ_FLIP,
                         393,
                         128.0,
                         128.0,
                         33872.0,
                         11344.0,
                         41063.0,
                         4.0,
                         0.5);  // upstairs edge of window

    // WALL_BRICK_GAP_YZ
    tp.CreateDisplayList(YZ,
                         180,
                         128.0,
                         32.0,
                         33895.0,
                         10192.0,
                         22079.0,
                         5.0,
                         0.530);  // end chanc
    tp.CreateDisplayList(YZ,
                         181,
                         128.0,
                         32.0,
                         33872.0,
                         10512.0,
                         30542.0,
                         2.5,
                         0.80);  // toilets phys sci
    // WALL_BRICK_GAP2_YZ
    tp.CreateDisplayList(YZ,
                         182,
                         128.0,
                         32.0,
                         33872.0,
                         10512.0,
                         27559.0,
                         2.5,
                         0.80);  // toilets phys sci
    // WALL_GAP_1
    tp.CreateDisplayList(XY,
                         183,
                         8.0,
                         128.0,
                         30792.0,
                         10000.0,
                         43056.0,
                         1.0,
                         6.0);  // near KBLT
    tp.CreateDisplayList(XY,
                         184,
                         8.0,
                         128.0,
                         30792.0,
                         11024.0,
                         43056.0,
                         1.0,
                         6.5);  // as above but upstairs
}

//--------------------------------------------------------------------------------------
// Display Roof
//--------------------------------------------------------------------------------------
void ShaysWorld::DisplayRoof() {
    // main roof planks
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ROOF_PLANKS));
    for (int i = 250; i < 253; i++)
        glCallList(i);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ROOF_BEAM_1));
    // corner beams
    for (int i = 1; i < 6; i++)
        glCallList(i);
    step = -1689.0;
    for (size_t i = 0; i < 85; i++) {
        glPushMatrix();
        glTranslated(0.0, 0.0, step);
        glCallList(253);
        glPopMatrix();
        step += 386.0;
    }
    glPushMatrix();
    glTranslatef(0.0, 0.0, -2005.0);
    glCallList(253);
    glPopMatrix();
    glCallList(254);

    step = 214.0;
    for (size_t i = 0; i < 8; i++) {
        glPushMatrix();
        glTranslated(0.0, 0.0, step);
        glCallList(254);
        glPopMatrix();
        step += 386.0;
    }

    glPushMatrix();
    glTranslatef(0.0, 0.0, 3216.0);
    glCallList(254);
    glPopMatrix();

    // Beams between library and phys sci
    step = 0.0;
    for (size_t i = 0; i < 5; i++) {
        glPushMatrix();
        glTranslated(0.0, 0.0, step);
        glCallList(298);
        glPopMatrix();
        step += 386.0;
    }

    glPushMatrix();
    glTranslatef(0.0, 0.0, -99.0);
    glCallList(298);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, 1798.0);
    glCallList(298);
    glPopMatrix();

    // Library Roof
    step = 281.0;
    for (size_t i = 0; i < 70; i++) {
        glPushMatrix();
        glTranslated(step, 0.0, 0.0);
        glCallList(296);
        glPopMatrix();
        step += 388.0;
    }

    // spacers
    for (int i = 202; i < 204; i++)
        glCallList(i);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ROOF_BEAM_4));
    for (int i = 6; i < 11; i++) {
        glCallList(i);
        glPushMatrix();
        glTranslatef(0.0, 0.0, 32.0);
        glCallList(i);
        glPopMatrix();
    }

    step = -1689.0;
    for (size_t i = 0; i < 85; i++) {
        glPushMatrix();
        glTranslated(0.0, 0.0, step);
        glCallList(255);
        glPopMatrix();
        glPushMatrix();
        glTranslated(0.0, 0.0, step + 32.0);
        glCallList(255);
        glPopMatrix();
        step += 386.0;
    }

    glPushMatrix();
    glTranslatef(0.0, 0.0, -2005.0);
    glCallList(255);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, -1973.0);
    glCallList(255);
    glPopMatrix();

    step = 214.0;
    for (size_t i = 0; i < 8; i++) {
        glPushMatrix();
        glTranslated(0.0, 0.0, step);
        glCallList(256);
        glPopMatrix();
        glPushMatrix();
        glTranslated(0.0, 0.0, step + 32.0);
        glCallList(256);
        glPopMatrix();
        step += 386.0;
    }

    glPushMatrix();
    glTranslatef(0.0, 0.0, 3216.0);
    glCallList(256);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, 32.0);
    glCallList(256);
    glPopMatrix();

    // Beams between library and phys sci
    step = 0.0;
    for (size_t i = 0; i < 5; i++) {
        glPushMatrix();
        glTranslated(0.0, 0.0, step);
        glCallList(299);
        glPopMatrix();
        glPushMatrix();
        glTranslated(0.0, 0.0, step + 32.0);
        glCallList(299);
        glPopMatrix();
        step += 386.0;
    }

    glPushMatrix();
    glTranslatef(0.0, 0.0, -67.0);
    glCallList(299);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, 1798.0);
    glCallList(299);
    glPopMatrix();

    // Library Roof
    step = 281.0;
    for (int i = 0; i < 70; i++) {
        glPushMatrix();
        glTranslated(step, 0.0, 0.0);
        glCallList(297);
        glPopMatrix();
        glPushMatrix();
        glTranslated(step + 32.0, 0.0, 0.0);
        glCallList(297);
        glPopMatrix();

        step += 388.0;
    }

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ROOF_PLANKS_2));
    glCallList(257);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ROOF_BEAM_3));
    // corner beams
    for (int i = 170; i < 175; i++) {
        glCallList(i + 5);
        glPushMatrix();
        glTranslatef(32.0, 0.0, 0.0);
        glCallList(i + 5);
        glPopMatrix();
    }
    glCallList(426);
    glCallList(427);
    glPushMatrix();
    glTranslatef(0.0, 49.0, 3248.0);
    glCallList(427);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 49.0, 19031.0);
    glCallList(427);
    glPopMatrix();

    // spacer top of chanc
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ROOF_BEAM_3_TOP));
    glCallList(204);
    glCallList(205);
    glPushMatrix();
    glTranslatef(64.0, 0.0, 0.0);
    glCallList(205);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ROOF_BEAM_2));
    // spacers
    for (int i = 97; i < 101; i++)
        glCallList(i);
    // corner beams
    for (int i = 170; i < 175; i++)
        glCallList(i);

    // Top of Roof
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ROOF_TOP));
    for (int i = 214; i < 216; i++)
        glCallList(i);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ROOF_TOP_LIB));
    glCallList(216);
}

void ShaysWorld::DrawRoof() {
    // Chanc Top of Roof
    glNewList(214, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(31740.0, 11364.0, 8100.0);
    glTexCoord2d(0.0, 257.9);
    glVertex3d(31740.0, 11364.0, 8100.0 + (128.0 * 257.9));
    glTexCoord2d(2.0, 273.4);
    glVertex3d(33848.0, 12140.72, 8100.0 + (128.0 * 273.4));
    glTexCoord2d(2.0, 0.0);
    glVertex3d(33848.0, 12140.72, 8100.0);
    glEnd();
    glEndList();
    // Canteen Top of Roof
    glNewList(215, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(2608.0, 12140.72, 8100.0);
    glTexCoord2d(0.0, 273.4);
    glVertex3d(2608.0, 12140.72, 8100.0 + (128.0 * 273.4));
    glTexCoord2d(2.0, 257.9);
    glVertex3d(4716.0, 11364.0, 8100.0 + (128.0 * 257.9));
    glTexCoord2d(2.0, 0.0);
    glVertex3d(4716.0, 11364.0, 8100.0);
    glEnd();
    glEndList();
    // Library Top of Roof
    glNewList(216, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(4716.0, 11364.0, 40983.2);
    glTexCoord2d(211.125, 0.0);
    glVertex3d(4716.0 + (128.0 * 211.125), 11364.0, 40983.2);
    glTexCoord2d(227.59, 16.15);
    glVertex3d(4716.0 + (128.0 * 227.59), 12140.72, 43095.2);
    glTexCoord2d(-16.47, 16.15);
    glVertex3d(2608.0, 12140.72, 43095.2);
    glEnd();
    glEndList();
    // Chanc Side Planks
    glNewList(250, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(31868.0, 11366.0, 8100.0);
    glTexCoord2d(0.0, 257.9);
    glVertex3d(31868.0, 11366.0, 8100.0 + (128.0 * 257.9));
    glTexCoord2d(16.48, 273.4);
    glVertex3d(33848.0, 12094.72, 8100.0 + (128.0 * 273.4));
    glTexCoord2d(16.48, 0.0);
    glVertex3d(33848.0, 12094.72, 8100.0);
    glEnd();
    glEndList();
    // Chanc Side Beams Bottom
    glNewList(253, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(31868.0, 11284.0, 10105.0);
    glTexCoord2d(0.0, 1.0);
    glVertex3d(31868.0, 11284.0, 10137.0);
    glTexCoord2d(16.48, 1.0);
    glVertex3d(33848.0, 12012.72, 10137.0);
    glTexCoord2d(16.48, 0.0);
    glVertex3d(33848.0, 12012.72, 10105.0);
    glEnd();
    glEndList();
    // Chanc Side Beams Side
    glNewList(255, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(31868.0, 11284.0, 10105.0);
    glTexCoord2d(0.0, 1.0);
    glVertex3d(31868.0, 11284.0 + 82.0, 10105.0);
    glTexCoord2d(16.48, 1.0);
    glVertex3d(33848.0, 12012.72 + 82.0, 10105.0);
    glTexCoord2d(16.48, 0.0);
    glVertex3d(33848.0, 12012.72, 10105.0);
    glEnd();
    glEndList();
    // Chanc Side Planks (between chanc and phys sci)
    glNewList(251, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(35748.0, 11366.0, 22046.0);
    glTexCoord2d(0.0, 25.79);
    glVertex3d(35748.0, 11366.0, 22046.0 + (128.0 * 25.79));
    glTexCoord2d(15.82, 25.79);
    glVertex3d(33848.0, 12065.28, 22046.0 + (128.0 * 25.79));
    glTexCoord2d(15.82, 0.0);
    glVertex3d(33848.0, 12065.28, 22046.0);
    glEnd();
    glEndList();
    // Chanc Side Beams Bottom (between phys sci and chanc)
    glNewList(254, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(35748.0, 11284.0, 22096.0);
    glTexCoord2d(0.0, 1.0);
    glVertex3d(35748.0, 11284.0, 22096.0 + 32.0);
    glTexCoord2d(15.82, 1.0);
    glVertex3d(33848.0, 11983.28, 22096.0 + 32.0);
    glTexCoord2d(15.82, 0.0);
    glVertex3d(33848.0, 11983.28, 22096.0);
    glEnd();
    glEndList();
    // Chanc Side Beams Side (between phys sci and chanc)
    glNewList(256, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(35748.0, 11284.0, 22096.0);
    glTexCoord2d(0.0, 1.0);
    glVertex3d(35748.0, 11284.0 + 82.0, 22096.0);
    glTexCoord2d(15.82, 1.0);
    glVertex3d(33848.0, 11983.28 + 82.0, 22096.0);
    glTexCoord2d(15.82, 0.0);
    glVertex3d(33848.0, 11983.28, 22096.0);
    glEnd();
    glEndList();
    // Chanc Side Planks (between phys sci and library)
    glNewList(252, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(36108.0, 11019.68, 41127.0);
    glTexCoord2d(0.0, 15.1);
    glVertex3d(36108.0, 11019.68, 41127.0 + (128.0 * 15.1));
    glTexCoord2d(19.44, 15.1);
    glVertex3d(33848.0, 12061.55, 41127.0 + (128.0 * 15.1));
    glTexCoord2d(19.44, 0.0);
    glVertex3d(33848.0, 12061.55, 41127.0);
    glEnd();
    glEndList();
    // Chanc Side Beams Bottom (between phys sci and library)
    glNewList(298, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(36108.0, 10937.68, 41226.0);
    glTexCoord2d(0.0, 1.0);
    glVertex3d(36108.0, 10937.68, 41226.0 + 32.0);
    glTexCoord2d(19.44, 1.0);
    glVertex3d(33848.0, 11979.55, 41226.0 + 32.0);
    glTexCoord2d(19.44, 0.0);
    glVertex3d(33848.0, 11979.55, 41226.0);
    glEnd();
    glEndList();
    // Chanc Side Beams Side (between phys sci and library)
    glNewList(299, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(36108.0, 10937.68, 41226.0);
    glTexCoord2d(0.0, 1.0);
    glVertex3d(36108.0, 10937.68 + 82.0, 41226.0);
    glTexCoord2d(19.44, 1.0);
    glVertex3d(33848.0, 11979.55 + 82.0, 41226.0);
    glTexCoord2d(19.44, 0.0);
    glVertex3d(33848.0, 11979.55, 41226.0);
    glEnd();
    glEndList();
    // Library Side Planks
    glNewList(257, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(4541.0, 11366.0, 43056.0 - 1942.0);
    glTexCoord2d(213.45, 0.0);
    glVertex3d(4541.0 + (128.0 * 213.45), 11366.0, 43056.0 - 1942.0);
    glTexCoord2d(228.6, 16.15);
    glVertex3d(4541.0 + (128.0 * 213.45) + 1940.0, 12080.0, 43056.0);
    glTexCoord2d(-15.1, 16.15);
    glVertex3d(2608.0, 12080.0, 43056.0);
    glEnd();
    glEndList();
    // Library Side Beams Bottom
    glNewList(296, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(4541.0, 11283.0, 41114.0);
    glTexCoord2d(0.0, 1.0);
    glVertex3d(4573.0, 11283.0, 41114.0);
    glTexCoord2d(16.15, 1.0);
    glVertex3d(4573.0, 11997.0, 43056.0);
    glTexCoord2d(16.15, 0.0);
    glVertex3d(4541.0, 11997.0, 43056.0);
    glEnd();
    glEndList();
    // Library Side Beams
    glNewList(297, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(4541.0, 11283.0, 41114.0);
    glTexCoord2d(0.0, 1.0);
    glVertex3d(4541.0, 11365.0, 41114.0);
    glTexCoord2d(16.15, 1.0);
    glVertex3d(4541.0, 12079.0, 43056.0);
    glTexCoord2d(16.15, 0.0);
    glVertex3f(4541.0, 11997.0, 43056.0);
    glEnd();
    glEndList();

    // spacer between phys sci
    tp.CreateDisplayList(YZ,
                         97,
                         32.0,
                         128.0,
                         33808.0,
                         12048.0,
                         25344.0,
                         1.0,
                         123.3);
    // spacer between phys sci amd chanc blocks
    tp.CreateDisplayList(YZ,
                         98,
                         32.0,
                         128.0,
                         35748.0,
                         11334.0,
                         22096.0,
                         1.0,
                         25.38);
    // spacer above main posts (chanc side)
    tp.CreateDisplayList(YZ,
                         99,
                         32.0,
                         128.0,
                         31868.0,
                         11334.0,
                         8100.0,
                         1.0,
                         257.9);
    // spacer above library
    tp.CreateDisplayList(XY,
                         202,
                         128.0,
                         32.0,
                         4541.0,
                         12048.0,
                         43056.0,
                         230.0,
                         1.0);
    // spacer above main posts (library side)
    tp.CreateDisplayList(XY,
                         203,
                         128.0,
                         32.0,
                         4541.0,
                         11332.0,
                         41114.0,
                         213.5,
                         1.08);
    // spacer above chanc
    tp.CreateDisplayList(YZ,
                         204,
                         128.0,
                         128.0,
                         33808.0,
                         11999.0,
                         8100.0,
                         0.64,
                         109.35);
    tp.CreateYtoZWindowList(205,
                            33848.0,
                            11954.0,
                            144.0,
                            22096.0,
                            3248.0,
                            0.64,
                            25.375);
    // centre beam between chanc and phys sci
    tp.CreateDisplayList(XZ,
                         426,
                         64.0,
                         128.0,
                         33848.0,
                         11954.0,
                         22096.0,
                         1.0,
                         25.375);
    // top corner spacer
    tp.CreateDisplayList(XY,
                         427,
                         64.0,
                         128.0,
                         33808.0,
                         11999.0,
                         22096.0,
                         0.75,
                         0.75);

    // Joins where roof slants
    DrawAngledRoofBeam(1, 33848.0 - 1867.0, 12012.72 - 687.13, 41226.0, 15.21);
    DrawAngledRoofBeam(2, 33848.0 - 1481.0, 12012.72 - 545.07, 41612.0, 12.0);
    DrawAngledRoofBeam(3, 33848.0 - 1095.0, 12012.72 - 403.01, 41998.0, 8.78);
    DrawAngledRoofBeam(4, 33848.0 - 709.0, 12012.72 - 260.94, 42384.0, 5.57);
    DrawAngledRoofBeam(5, 33848.0 - 323.0, 12012.72 - 118.88, 42770.0, 2.36);
    DrawAngledRoofBeam2(170,
                        31980.0,
                        11998.0 - 672.41,
                        43056.0 - 1827.0,
                        15.21);
    DrawAngledRoofBeam2(171, 32366.0, 11998.0 - 530.35, 43056.0 - 1441.0, 12.0);
    DrawAngledRoofBeam2(172, 32752.0, 11998.0 - 388.28, 43056.0 - 1055.0, 8.78);
    DrawAngledRoofBeam2(173, 33138.0, 11998.0 - 246.22, 43056.0 - 669.0, 5.57);
    DrawAngledRoofBeam2(174, 33524.0, 11998.0 - 104.16, 43056.0 - 283.0, 2.36);
}

// --------------------------------------------------------------------------------------
//  Creates Angled Roof Beams
// --------------------------------------------------------------------------------------
void ShaysWorld::DrawAngledRoofBeam(int listNo,
                                    GLdouble x,
                                    GLdouble y,
                                    GLdouble z,
                                    GLdouble beamSize) {
    glNewList(listNo, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(x, y, z + 32.0);
    glTexCoord2d(0.0, 1.0);
    glVertex3d(x, y, z);
    glTexCoord2d(beamSize, 1.0);
    glVertex3d(33848.0, 12012.72, z);
    glTexCoord2d(beamSize, 0.0);
    glVertex3d(33848.0, 12012.72, z + 32.0);
    glEnd();
    glEndList();
    glNewList(listNo + 5, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(x, y, z);
    glTexCoord2d(0.0, 1.0);
    glVertex3d(x, y + 82.0, z);
    glTexCoord2d(beamSize, 1.0);
    glVertex3d(33848.0, 12012.72 + 82.0, z);
    glTexCoord2d(beamSize, 0.0);
    glVertex3d(33848.0, 12012.72, z);
    glEnd();
    glEndList();
}

void ShaysWorld::DrawAngledRoofBeam2(int listNo,
                                     GLdouble x,
                                     GLdouble y,
                                     GLdouble z,
                                     GLdouble beamSize) {
    glNewList(listNo, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(x, y, z);
    glTexCoord2d(1.0, 0.0);
    glVertex3d(x + 32.0, y, z);
    glTexCoord2d(1.0, beamSize);
    glVertex3d(x + 32.0, 11998.0, 43056);
    glTexCoord2d(0.0, beamSize);
    glVertex3d(x, 11998.0, 43056);
    glEnd();
    glEndList();
    glNewList(listNo + 5, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(x, y, z);
    glTexCoord2d(1.0, 0.0);
    glVertex3d(x, y + 82.0, z);
    glTexCoord2d(1.0, beamSize);
    glVertex3d(x, 11998.0 + 82.0, 43056);
    glTexCoord2d(0.0, beamSize);
    glVertex3d(x, 11998.0, 43056);
    glEnd();
    glEndList();
}

//--------------------------------------------------------------------------------------
// Display Steps
//--------------------------------------------------------------------------------------
void ShaysWorld::DisplayEntranceSteps() {
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(STEP_PAVING_1));
    for (int i = 258; i < 274; i++)
        glCallList(i);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(STEP_EDGE));
    for (int i = 274; i < 290; i++)
        glCallList(i);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(STEP_PAVING_1));
    for (int i = 290; i < 293; i++)
        glCallList(i);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(STEP_EDGE));
    for (int i = 293; i < 296; i++)
        glCallList(i);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(STEPS_LIBRARY));
    step = 0.0;
    step2 = -51.0;
    for (size_t i = 0; i < 10; i++) {
        glPushMatrix();
        glTranslated(step, step2, 0.0);
        glCallList(206);
        glPopMatrix();
        glPushMatrix();
        glTranslated(step, step2, 965.0);
        glCallList(206);
        glPopMatrix();
        step += 128.0;
        step2 += -51.0;
    }
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(STEPS_LIBRARY_TOP));
    glCallList(207);
    glPushMatrix();
    glTranslatef(0.0, 0.0, 965.0);
    glCallList(207);
    glPopMatrix();
}

void ShaysWorld::DrawEntranceSteps() {
    step = 10000.0;
    stepLength = 9808.0;
    for (int i = 258; i < 274; i++) {
        tp.CreateDisplayList(XZ,
                             i,
                             1024.0,
                             512.0,
                             31582.0,
                             step,
                             stepLength,
                             2.2,
                             0.277);
        tp.CreateDisplayList(XY,
                             i + 16,
                             64.0,
                             64.0,
                             31582.0,
                             step - 64.0,
                             stepLength,
                             35.0,
                             1.0);
        step -= 48.0;
        stepLength -= 142.0;
        if ((i + 3) % 4 == 0) {
            stepLength -= 500.0;
            step -= 48.0;
        }
    }
    step = 9808.0;
    stepLength = 8882.0;
    for (int i = 290; i < 293; i++) {
        tp.CreateDisplayList(XZ,
                             i,
                             1024.0,
                             512.0,
                             31582.0,
                             step,
                             stepLength,
                             2.2,
                             1.0);
        tp.CreateDisplayList(XY,
                             i + 3,
                             64.0,
                             64.0,
                             31582.0,
                             step - 64.0,
                             stepLength,
                             35.0,
                             1.0);
        step -= 239.0;
        stepLength -= 1068.0;
    }

    // steps next to GCL1
    tp.CreateDisplayList(XZ,
                         206,
                         128.0,
                         1024.0,
                         34508.0,
                         10000.0,
                         41127,
                         1.0,
                         0.942);
    tp.CreateDisplayList(XZ,
                         207,
                         256.0,
                         1024.0,
                         34352.0,
                         10000.0,
                         41127,
                         0.609,
                         0.942);
}

//--------------------------------------------------------------------------------------
// Display Bench
//--------------------------------------------------------------------------------------
void ShaysWorld::DisplayBench() {
    step2 = 3860.0;
    for (size_t j = 0; j < 11; j++) {
        glPushMatrix();
        glTranslated(0.0, 0.0, step2);

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(BENCH_TOP));
        glCallList(400);

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(BENCH_SIDE));
        glCallList(401);
        glPushMatrix();
        glTranslatef(0.0, 0.0, 480.0);
        glCallList(401);
        glPopMatrix();

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(BENCH_SIDE_2));
        glPushMatrix();
        glTranslatef(0.0, 0.0, 50.0);
        glCallList(402);
        glPopMatrix();
        glPushMatrix();
        glTranslatef(0.0, 0.0, 430.0);
        glCallList(402);
        glPopMatrix();

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(BENCH_EDGE_TOP));
        step = 0.0;
        for (size_t i = 0; i < 2; i++) {
            glPushMatrix();
            glTranslated(0.0, 0.0, step);
            glCallList(403);
            glPushMatrix();
            glTranslatef(192.0, 0.0, 0.0);
            glCallList(403);
            glPopMatrix();
            glPopMatrix();
            step += 430;
        }
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(BENCH_EDGE_SIDE));
        step = 0.0;
        for (size_t i = 0; i < 2; i++) {
            glPushMatrix();
            glTranslated(step, 0.0, 0.0);
            glCallList(404);
            glPopMatrix();
            ;
            step += 192;
        }

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(BENCH_EDGE));
        glCallList(405);
        glPushMatrix();
        glTranslatef(192.0, 0.0, 0.0);
        glCallList(405);
        glPopMatrix();
        glCallList(406);
        glPushMatrix();
        glTranslatef(192.0, 0.0, 0.0);
        glCallList(406);
        glPopMatrix();

        glPopMatrix();
        step2 += 1930.0;
        if (j == 4)
            step2 += 5790.0;
    }

    step2 = 1940.0;
    GLdouble vertStep = 0.0;
    for (size_t j = 0; j < 8; j++) {
        glPushMatrix();
        glTranslated(step2, 0.0, vertStep);

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(BENCH_TOP));
        glCallList(407);

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(BENCH_SIDE));
        glCallList(408);
        glPushMatrix();
        glTranslatef(480.0, 0.0, 0.0);
        glCallList(408);
        glPopMatrix();

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(BENCH_SIDE_2));
        glPushMatrix();
        glTranslatef(50.0, 0.0, 0.0);
        glCallList(409);
        glPopMatrix();
        glPushMatrix();
        glTranslatef(430.0, 0.0, 0.0);
        glCallList(409);
        glPopMatrix();

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(BENCH_EDGE_TOP_2));
        step = 0.0;
        for (size_t i = 0; i < 2; i++) {
            glPushMatrix();
            glTranslated(step, 0.0, 0.0);
            glCallList(410);
            glPushMatrix();
            glTranslatef(0.0, 0.0, 192.0);
            glCallList(410);
            glPopMatrix();
            glPopMatrix();
            step += 430;
        }
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(BENCH_EDGE_3));
        step = 0.0;
        for (size_t i = 0; i < 2; i++) {
            glPushMatrix();
            glTranslated(0.0, 0.0, step);
            glCallList(411);
            glPopMatrix();
            ;
            step += 192;
        }

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(BENCH_EDGE_2));
        glCallList(412);
        glPushMatrix();
        glTranslatef(0.0, 0.0, 192.0);
        glCallList(412);
        glPopMatrix();
        glCallList(413);
        glPushMatrix();
        glTranslatef(0.0, 0.0, 192.0);
        glCallList(413);
        glPopMatrix();

        glPopMatrix();
        step2 += 1940.0;
        if (j == 1)
            step2 += 1940.0;
        if (j == 5)
            step2 += 9700.0;
        if (j == 6) {
            vertStep += 1848.0;
            step2 = 5926.0;
        }
    }
}

void ShaysWorld::DrawBench() {
    tp.CreateDisplayList(XZ,
                         400,
                         64.0,
                         64.0,
                         31760.0,
                         10147.0,
                         10894.0,
                         3.0,
                         7.5);
    tp.CreateDisplayList(XY,
                         401,
                         64.0,
                         64.0,
                         31760.0,
                         10000.0,
                         10894.0,
                         3.0,
                         2.3);
    tp.CreateDisplayList(XY,
                         402,
                         64.0,
                         64.0,
                         31760.0,
                         10000.0,
                         10894.0,
                         3.0,
                         1.72);
    tp.CreateDisplayList(YZ,
                         403,
                         64.0,
                         64.0,
                         31760.0,
                         10000.0,
                         10894.0,
                         1.72,
                         0.78);
    tp.CreateDisplayList(YZ,
                         404,
                         64.0,
                         64.0,
                         31760.0,
                         10107.0,
                         10944.0,
                         0.625,
                         5.938);
    tp.CreateDisplayList(YZ,
                         405,
                         64.0,
                         64.0,
                         31760.0,
                         10107.0,
                         10894.0,
                         0.625,
                         0.78);
    tp.CreateDisplayList(YZ_FLIP,
                         406,
                         64.0,
                         64.0,
                         31760.0,
                         10107.0,
                         11324.0,
                         0.625,
                         0.78);

    tp.CreateDisplayList(XZ,
                         407,
                         64.0,
                         64.0,
                         5410.0,
                         10147.0,
                         41008.0,
                         7.5,
                         3.0);
    tp.CreateDisplayList(YZ,
                         408,
                         64.0,
                         64.0,
                         5410.0,
                         10000.0,
                         41008.0,
                         2.3,
                         3.0);
    tp.CreateDisplayList(YZ,
                         409,
                         64.0,
                         64.0,
                         5410.0,
                         10000.0,
                         41008.0,
                         1.72,
                         3.0);
    tp.CreateDisplayList(XY,
                         410,
                         64.0,
                         64.0,
                         5410.0,
                         10000.0,
                         41008.0,
                         0.78,
                         1.72);
    tp.CreateDisplayList(XY,
                         411,
                         64.0,
                         64.0,
                         5460.0,
                         10107.0,
                         41008.0,
                         5.938,
                         0.625);
    tp.CreateDisplayList(XY,
                         412,
                         64.0,
                         64.0,
                         5410.0,
                         10107.0,
                         41008.0,
                         0.78,
                         0.625);
    tp.CreateDisplayList(XY_FLIP,
                         413,
                         64.0,
                         64.0,
                         5410.0 + 430.0,
                         10107.0,
                         41008.0,
                         0.78,
                         0.625);
}

//--------------------------------------------------------------------------------------
// Display Extras (signs etc)
//--------------------------------------------------------------------------------------
void ShaysWorld::DisplayExtras() {
    // Rusty Man like Sculpture
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(RUSTY_MAN));
    glCallList(300);

    // Directions sign next to Sta Travel Shop
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(SIGN_1));
    glCallList(301);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(SIGN_1_SIDE_1));
    glCallList(302);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(SIGN_1_SIDE_2));
    glCallList(303);

    // GCL1 Sign
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(SIGN_2));
    glCallList(304);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(SIGN_2_SIDE));
    glCallList(305);
    glPushMatrix();
    glTranslatef(384.0, 0.0, 0.0);
    glCallList(305);
    glPopMatrix();

    // KBLT
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(KBLT_EDGE));
    glCallList(306);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(KBLT_EDGE_2));
    glCallList(307);
    glCallList(308);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(KBLT_EDGE_CORNER));
    glCallList(309);
    glPushMatrix();
    glTranslatef(2471.0, 0.0, 0.0);
    glCallList(309);
    glPopMatrix();

    // Nexus Sign
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(NEXUS_SIDE));
    glCallList(310);
    glPushMatrix();
    glTranslatef(1280.0, 0.0, 0.0);
    glCallList(310);
    glPopMatrix();

    // Glass Notice Board next to KBLT
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(GLASS_B_SIDE));
    glCallList(311);
    glPushMatrix();
    glTranslatef(896.0, 0.0, 0.0);
    glCallList(311);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(3904.0, 0.0, 0.0);
    glCallList(311);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(4800.0, 0.0, 0.0);
    glCallList(311);
    glPopMatrix();
    glCallList(435);
    glPushMatrix();
    glTranslatef(768.0, 0.0, 0.0);
    glCallList(435);
    glPopMatrix();

    // Security Sign on Chanc Doorway
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(SECURITY_SIGN));
    glCallList(312);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(SECURITY_SIGN_2));
    glCallList(313);

    //  Prospective Student Sign
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(PSC_SIGN));
    glCallList(314);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(PSC_SIGN_2));
    glCallList(315);

    // Staff Sign
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(CO_SIGN));
    glCallList(316);

    // DRINKS MACINE
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(DRINKS_SIDE_2));
    for (int i = 317; i < 319; i++)
        glCallList(i);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(DRINKS_SIDE));
    glPushMatrix();
    glTranslatef(-1152.0, 0.0, 0.0);
    glCallList(317);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(DRINKS_TOP));
    glCallList(319);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(DRINKS_EDGE));
    glCallList(320);
    glPushMatrix();
    glTranslatef(-1136.0, 0.0, 0.0);
    glCallList(320);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(MACHINE_SIDES));
    for (int i = 321; i < 323; i++)
        glCallList(i);
    glCallList(320);
    glPushMatrix();
    glTranslated(317.12, 0.0, 0.0);
    glCallList(321);
    glPopMatrix();
    glCallList(320);
    glPushMatrix();
    glTranslatef(255.0, 0.0, 0.0);
    glCallList(322);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(MACHINE_SIDES_2));
    glCallList(323);
    glPushMatrix();
    glTranslatef(350.0, 0.0, 0.0);
    glCallList(323);
    glPopMatrix();

    // Doorway Carpet
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(CARPET));
    glCallList(324);
    glCallList(429);

    // No Smoking Sign
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(NO_SMOKE_SIGN));
    glCallList(326);
    glCallList(327);

    // Star Travel Sign
    step = 0.0;
    int sign = STA_TRAVEL;
    int signBack = STA_TRAVEL_2;
    int signEdge = STA_TRAVEL_EDGE;
    for (size_t i = 0; i < 2; i++) {
        glPushMatrix();
        glTranslated(0.0, 0.0, step);
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(sign));
        glCallList(328);

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(signEdge));
        glCallList(329);

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(STA_TRAVEL_BRACKET));
        glCallList(330);
        glPushMatrix();
        glTranslatef(0.0, 0.0, 64.0);
        glCallList(330);
        glPopMatrix();

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(signBack));
        glCallList(331);

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(STA_TRAVEL_BOTTOM));
        glCallList(332);
        glPopMatrix();
        step -= 3840.0;
        sign = GS_SIGN;
        signBack = GS_SIGN_2;
        signEdge = GS_SIGN_EDGE;
    }

    // Telephone Boxes
    step = 0.0;
    for (size_t i = 0; i < 2; i++) {
        glPushMatrix();
        glTranslated(step, 0.0, 0.0);

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TELEPHONE_BACK));
        glCallList(333);
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TELEPHONE_FRONT));
        glCallList(334);
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TELEPHONE_SIDE_1));
        glCallList(335);
        glPushMatrix();
        glTranslatef(285.0, 0.0, 0.0);
        glCallList(335);
        glPopMatrix();
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TELEPHONE_FRONT_2));
        glCallList(336);
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TELEPHONE_MAIN_SIDE));
        glCallList(337);
        glPushMatrix();
        glTranslatef(285.0, 0.0, 0.0);
        glCallList(337);
        glPopMatrix();

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TELEPHONE_TOP_1));
        glCallList(338);
        glCallList(340);

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TELEPHONE_SIDE_2));
        glCallList(339);
        glPushMatrix();
        glTranslatef(285.0, 0.0, 0.0);
        glCallList(339);
        glPopMatrix();

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TELEPHONE_TOP_2));
        glCallList(341);
        glCallList(342);

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TELEPHONE_BOTTOM));
        glCallList(343);

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TELEPHONE_FILL));
        glCallList(348);
        glCallList(349);
        glPushMatrix();
        glTranslated(0.0, 0.0, 168.2);
        glCallList(349);
        glPopMatrix();
        glCallList(388);
        glPushMatrix();
        glTranslated(275.2, 0.0, 0.0);
        glCallList(388);
        glPopMatrix();

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TELEPHONE_FRONT_3));
        glCallList(395);
        glPushMatrix();
        glTranslatef(269.0, 0.0, 0.0);
        glCallList(395);
        glPopMatrix();

        glPopMatrix();
        step += 384.0;
    }

    // Sides of KBLT
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(KBLT_SIDE_1));
    glCallList(345);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(KBLT_SIDE_2));
    glCallList(346);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(KBLT_SIDE_1));
    glPushMatrix();
    glTranslatef(-2496.0, 0.0, 0.0);
    glCallList(345);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(KBLT_SIDE_2));
    glPushMatrix();
    glTranslatef(-2316.0, 0.0, 0.0);
    glCallList(346);
    glPopMatrix();

    // Toilet Signs
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TOILET_WOMEN));
    glCallList(347);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TOILET_MEN));
    glPushMatrix();
    glTranslatef(0.0, 0.0, 1920.0);
    glCallList(347);
    glPopMatrix();

    // Ledge of Ticket Office
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TICKET_LEDGE));
    glCallList(419);
    glPushMatrix();
    glTranslatef(0.0, 32.0, 0.0);
    glCallList(419);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TICKET_LEDGE_EDGE));
    glCallList(420);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TICKET_LEDGE_EDGE_2));
    glCallList(421);
    glPushMatrix();
    glTranslatef(1208.0, 0.0, 0.0);
    glCallList(421);
    glPopMatrix();
}

void ShaysWorld::DrawExtras() {
    tp.CreateDisplayList(YZ,
                         300,
                         256.0,
                         1024.0,
                         33808.0,
                         10576.0,
                         25472.0,
                         1.0,
                         1.0);  // Rusty Man

    tp.CreateDisplayList(YZ,
                         301,
                         512.0,
                         256.0,
                         33792.0,
                         10320.0,
                         40794.0,
                         0.75,
                         0.609);  // Sign 1 (end of phys sci)
    tp.CreateDisplayList(XY,
                         302,
                         16.0,
                         512.0,
                         33792.0,
                         10320.0,
                         40794.0,
                         1.0,
                         0.75);  // side of sign 1
    tp.CreateDisplayList(XY,
                         303,
                         16.0,
                         512.0,
                         33792.0,
                         10320.0,
                         40950.0,
                         1.0,
                         0.75);  // side of sign 1
    tp.CreateDisplayList(XY,
                         304,
                         512.0,
                         512.0,
                         33637.0,
                         10410.0,
                         43040.0,
                         0.75,
                         0.574);  // Sign 2 (GCL1)

    tp.CreateDisplayList(YZ,
                         305,
                         512.0,
                         16.0,
                         33637.0,
                         10410.0,
                         43040.0,
                         0.574,
                         1.0);  // side of sign 2

    tp.CreateDisplayList(XY,
                         306,
                         16.0,
                         32.0,
                         25633.0,
                         10902.0,
                         42756.0,
                         152.88,
                         1.0);  // KBLT edge top
    tp.CreateDisplayList(XY,
                         307,
                         32.0,
                         16.0,
                         25608.0,
                         10000.0,
                         42756.0,
                         1.0,
                         56.375);  // KBLT edge left
    tp.CreateDisplayList(XY_FLIP,
                         308,
                         32.0,
                         16.0,
                         28072.0,
                         10000.0,
                         42756.0,
                         1.0,
                         56.375);  // KBLT right
    tp.CreateDisplayList(XY,
                         309,
                         1.0,
                         1.0,
                         25608.0,
                         10902.0,
                         42756.0,
                         25.0,
                         32.0);  // KBLT corner
    tp.CreateDisplayList(YZ,
                         310,
                         2.0,
                         16.0,
                         29512.0,
                         10288.0,
                         43040.0,
                         240.0,
                         1.0);  // Side of Nexus

    tp.CreateDisplayList(YZ,
                         311,
                         2.0,
                         16.0,
                         24456.0,
                         10320.0,
                         43040.0,
                         224.0,
                         1.0);  // Side of Glassboards
    tp.CreateDisplayList(YZ,
                         435,
                         2.0,
                         16.0,
                         7304.0,
                         10256.0,
                         43040.0,
                         192.0,
                         1.0);  // Side of Glassboards

    tp.CreateDisplayList(XY,
                         312,
                         128.0,
                         128.0,
                         33752.0,
                         10659.0,
                         10511.0,
                         0.75,
                         0.75);  // security sign
    tp.CreateDisplayList(XY,
                         313,
                         128.0,
                         128.0,
                         33752.0,
                         10659.0,
                         10513.0,
                         0.75,
                         0.75);  // security sign

    tp.CreateDisplayList(XY,
                         314,
                         256.0,
                         128.0,
                         33660.0,
                         10836.0,
                         20111.0,
                         0.578,
                         0.561);  // PSC sign
    tp.CreateDisplayList(XY,
                         315,
                         256.0,
                         128.0,
                         33660.0,
                         10836.0,
                         20113.0,
                         0.578,
                         0.561);  // PSC sign

    tp.CreateDisplayList(YZ,
                         316,
                         256.0,
                         128.0,
                         33808.0,
                         10256.0,
                         34126.0,
                         1.0,
                         1.0);  // CO sign

    tp.CreateDisplayList(YZ,
                         317,
                         64.0,
                         64.0,
                         35856.0,
                         10000.0,
                         24996.0,
                         11.5,
                         5.47);  // Drinks Machine
    tp.CreateDisplayList(XY,
                         319,
                         64.0,
                         64.0,
                         34704.0,
                         10672.0,
                         24996.0,
                         18.0,
                         1.0);  // Drinks Machine
    tp.CreateDisplayList(XZ,
                         318,
                         64.0,
                         64.0,
                         34704.0,
                         10736.0,
                         24996.0,
                         18.0,
                         5.5);  // Drinks Machine
    tp.CreateDisplayList(XY,
                         320,
                         16.0,
                         2.0,
                         35840.0,
                         10000.0,
                         24996.0,
                         1.0,
                         336.0);  // Drinks Machine
    tp.CreateDisplayList(YZ,
                         321,
                         1.0,
                         1.0,
                         35458.0,
                         10000.0,
                         25016.0,
                         660.0,
                         300.0);  // Drinks Machine Sides
    tp.CreateDisplayList(YZ,
                         322,
                         1.0,
                         1.0,
                         35163.0,
                         10000.0,
                         25016.0,
                         586.2,
                         300.0);  // Drinks Machine Sides
    tp.CreateDisplayList(YZ,
                         323,
                         1.0,
                         1.0,
                         34778.0,
                         10000.0,
                         25016.0,
                         593.22,
                         300.0);  // Drinks Machine Sides

    tp.CreateDisplayList(XZ,
                         324,
                         32.0,
                         32.0,
                         34064.0,
                         10000.0,
                         26704.0,
                         6.0,
                         20.0);  // Carpet 1st doorway
    tp.CreateDisplayList(XZ,
                         429,
                         32.0,
                         32.0,
                         34064.0,
                         10000.0,
                         36643.2,
                         9.0,
                         17.4);  // Carpet 2nd doorway

    tp.CreateDisplayList(YZ,
                         326,
                         256.0,
                         128.0,
                         34260.0,
                         10320.0,
                         36511.0,
                         1.1,
                         1.0);  // No smoke sign doorway 2
    tp.CreateDisplayList(YZ,
                         327,
                         256.0,
                         128.0,
                         34256.0,
                         10320.0,
                         27303.0,
                         1.1,
                         1.1);  // No smoke sign doorway 1

    tp.CreateDisplayList(XY,
                         328,
                         256.0,
                         256.0,
                         33595.0,
                         10828.0,
                         40071.0,
                         0.773,
                         0.855);  // Sta Travel sign
    tp.CreateDisplayList(YZ,
                         329,
                         256.0,
                         64.0,
                         33595.0,
                         10828.0,
                         40071.0,
                         0.855,
                         1.0);  // Sta Travel sign edge
    tp.CreateDisplayList(XY,
                         330,
                         16.0,
                         2.0,
                         33792.0,
                         10854.0,
                         40071.0,
                         1.0,
                         76.0);  // Sta Travel sign bracket
    tp.CreateDisplayList(XY,
                         331,
                         256.0,
                         256.0,
                         33595.0,
                         10828.0,
                         40135.0,
                         0.773,
                         0.855);  // Sta Travel sign 2
    tp.CreateDisplayList(XZ,
                         332,
                         2.0,
                         64.0,
                         33595.0,
                         10828.0,
                         40071.0,
                         99.0,
                         1.0);  // Sta Travel bottom

    tp.CreateDisplayList(XY,
                         333,
                         512.0,
                         512.0,
                         33808.0,
                         10192.0,
                         25344.0,
                         0.752,
                         1.05);  // Telephone Back
    tp.CreateDisplayList(XY,
                         334,
                         512.0,
                         32.0,
                         33882.0,
                         10598.0,
                         25173.0,
                         0.557,
                         0.719);  // Telephone front
    tp.CreateDisplayList(YZ,
                         335,
                         32.0,
                         256.0,
                         33882.0,
                         10598.0,
                         25173.0,
                         0.719,
                         0.7);  // Telephone side top
    tp.CreateDisplayList(XY,
                         336,
                         512.0,
                         16.0,
                         33882.0,
                         10621.0,
                         25173.0,
                         0.557,
                         0.75);  // Telephone front
    tp.CreateDisplayList(YZ,
                         339,
                         16.0,
                         256.0,
                         33882.0,
                         10621.0,
                         25173.0,
                         0.75,
                         0.7);  // Telephone side
    tp.CreateDisplayList(XZ,
                         343,
                         512.0,
                         128.0,
                         33882.0,
                         10268.0,
                         25250.0,
                         0.558,
                         0.75);  // Telephone bottom
    tp.CreateDisplayList(XZ,
                         348,
                         2.0,
                         2.0,
                         33918.0,
                         10697.84,
                         25201.6,
                         107.0,
                         56.9);  // telephone roof
    tp.CreateDisplayList(XZ,
                         349,
                         2.0,
                         2.0,
                         33882.0,
                         10633.0,
                         25173.0,
                         142.6,
                         2.5);  // telephone roof
    tp.CreateDisplayList(XZ,
                         388,
                         2.0,
                         2.0,
                         33882.0,
                         10633.0,
                         25173.0,
                         5.0,
                         89.6);  // telephone roof

    tp.CreateDisplayList(YZ,
                         345,
                         2.0,
                         128.0,
                         28104.0,
                         10000.0,
                         42756.0,
                         467.0,
                         1.0);  // KBLT side
    tp.CreateDisplayList(YZ,
                         346,
                         2.0,
                         2.0,
                         28014.0,
                         10000.0,
                         42866.0,
                         416.0,
                         98.0);  // KBLT side

    // TELEPHONE ROOF
    tp.CreateAngledPolygon(337,
                           512.0,
                           256.0,
                           33882.0,
                           33882.0,
                           33882.0,
                           33882.0,
                           10268.0,
                           10268.0,
                           10598.24,
                           10598.24,
                           25250.0,
                           25345.34,
                           25345.34,
                           25173.0,
                           6,
                           4);
    glNewList(338, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(33890.0, 10633.0, 25178.0);
    glTexCoord2d(0.527, 0.0);
    glVertex3d(34160.0, 10633.0, 25178.0);
    glTexCoord2d(0.473, 0.54);
    glVertex3d(34132.0, 10697.84, 25201.6);
    glTexCoord2d(0.055, 0.54);
    glVertex3d(33918.0, 10697.84, 25201.6);
    glEnd();
    glEndList();
    glNewList(341, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(33891.0, 10633.0, 25178.0);
    glTexCoord2d(0.0, 0.637);
    glVertex3d(33891.0, 10633.0, 25341.0);
    glTexCoord2d(0.54, 0.538);
    glVertex3d(33918.5, 10697.84, 25315.6);
    glTexCoord2d(0.54, 0.1);
    glVertex3d(33918.5, 10697.84, 25201.6);
    glEnd();
    glEndList();
    glNewList(342, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(34159.5, 10633.0, 25178.0);
    glTexCoord2d(0.0, 0.637);
    glVertex3d(34159.5, 10633.0, 25341.0);
    glTexCoord2d(0.54, 0.538);
    glVertex3d(34132.0, 10697.84, 25315.6);
    glTexCoord2d(0.54, 0.1);
    glVertex3d(34132.0, 10697.84, 25201.6);
    glEnd();
    glEndList();
    glNewList(340, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(33890.0, 10631.0, 25341.0);
    glTexCoord2d(0.527, 0.0);
    glVertex3d(34160.0, 10631.0, 25341.0);
    glTexCoord2d(0.473, 0.535);
    glVertex3d(34132.0, 10697.84, 25315.4);
    glTexCoord2d(0.055, 0.535);
    glVertex3d(33918.0, 10697.84, 25315.4);
    glEnd();
    glEndList();
    glNewList(395, GL_COMPILE);
    glBegin(GL_QUADS);
    glTexCoord2d(0.0, 0.0);
    glVertex3d(33882.0, 10268.0, 25250.0);
    glTexCoord2d(1.0, 0.0);
    glVertex3d(33898.0, 10268.0, 25250.0);
    glTexCoord2d(1.0, 0.729);
    glVertex3d(33898.0, 10598.24, 25173.0);
    glTexCoord2d(0.0, 0.729);
    glVertex3d(33882.0, 10598.24, 25173.0);
    glEnd();
    glEndList();

    tp.CreateDisplayList(YZ,
                         347,
                         128.0,
                         128.0,
                         33808.0,
                         10384.0,
                         28519.0,
                         1.0,
                         1.0);  // toilets sign

    tp.CreateDisplayList(XZ,
                         419,
                         2.0,
                         128.0,
                         22928.0,
                         10870.0,
                         42960.0,
                         604.0,
                         0.78);  // ticket box ledge
    tp.CreateDisplayList(XY,
                         420,
                         2.0,
                         32.0,
                         22928.0,
                         10870.0,
                         42960.0,
                         604.0,
                         1.0);  // ticket box ledge edge
    tp.CreateDisplayList(YZ,
                         421,
                         32.0,
                         2.0,
                         22928.0,
                         10870.0,
                         42960.0,
                         1.0,
                         49);  // ticket box ledge edge side
}

// --------------------------------------------------------------------------------------
// Display larger textures such as windows and doors
// --------------------------------------------------------------------------------------

void ShaysWorld::DisplayLargerTextures() {
    // Gap betweem chanc and phys sci
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_1));
    glCallList(350);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_1B));
    glCallList(351);

    // Chanc Windows Downstairrs
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_2));
    step = 1920.0;
    for (size_t i = 0; i < 2; i++) {
        glPushMatrix();
        glTranslated(0.f, 0.f, step);
        glCallList(352);
        glPopMatrix();
        step += 2880;
    }

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_2B));
    step = 2880.0;
    for (size_t i = 0; i < 3; i++) {
        glPushMatrix();
        glTranslated(0.f, 0.f, step);
        glCallList(352);
        glPopMatrix();
        step += 2880;
        if (i == 2)
            step -= 960.0;
    }

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_2C));
    step = 6720.0;
    for (size_t i = 1; i < 3; i++) {
        glPushMatrix();
        glTranslated(0.f, 0.f, step);
        glCallList(352);
        glPopMatrix();
        step += 2880;
        if (i == 1)
            step += 1920.0;
    }

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_2D));
    glPushMatrix();
    glTranslatef(0.0, 0.0, 3840.0);
    glCallList(352);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0.0, 0.0, 10560.0);
    glCallList(352);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_2E));
    glCallList(352);
    glPushMatrix();
    glTranslatef(0.0, 0.0, 7680.0);
    glCallList(352);
    glPopMatrix();

    // Chanc Windows Upstairs
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_2US));
    glPushMatrix();
    glTranslatef(0.0, 1023.0, 0.0);
    glCallList(352);
    glPopMatrix();
    step = 9600.0;
    for (size_t i = 0; i < 3; i++) {
        glPushMatrix();
        glTranslated(0.f, 1023.f, step);
        glCallList(352);
        glPopMatrix();
        step += 960;
    }

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_2USB));
    step = 960;
    for (size_t i = 0; i < 9; i++) {
        glPushMatrix();
        glTranslated(0.f, 1023.f, step);
        glCallList(352);
        glPopMatrix();
        step += 960;
    }

    // Physical Science upstairs
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_3));
    step = 3840.0;
    for (size_t i = 4; i < 14; i++) {
        glPushMatrix();
        glTranslated(0.f, 0.f, step);
        glCallList(353);
        glPopMatrix();
        step += 960;
    }
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_3B));
    step = 0.0;
    for (size_t i = 0; i < 6; i++) {
        glPushMatrix();
        glTranslated(0.f, 0.f, step);
        glCallList(353);
        glPopMatrix();
        step += 960.0;
        if (i == 4)
            step = 13440.0;
    }  //--------------------------------------------------------------

    // toilets
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_4));
    step = 0.0;
    for (size_t i = 0; i < 2; i++) {
        glPushMatrix();
        glTranslated(0.f, 0.f, step);
        glCallList(354);
        glPopMatrix();
        step += 1920;
    }
    // See draw function for details of below
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_5));
    glCallList(355);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_6));
    glCallList(356);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_7));
    glCallList(357);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_8));
    glCallList(358);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_9));
    glCallList(359);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_10));
    glCallList(360);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_11));
    glCallList(361);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_12));
    glCallList(362);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(NEXUS_SIGN));
    glCallList(363);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(GLASS_BOARD));
    glCallList(364);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(GLASS_BOARD_2));
    glCallList(365);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(GLASS_BOARD_3));
    glCallList(366);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(KBLT));
    glCallList(367);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ENTRANCE));
    glCallList(368);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ENTRANCE_2));
    glCallList(369);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(COKE_MACHINE));
    glCallList(370);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(COFFEE_MACHINE));
    glCallList(371);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(SWEET_MACHINE));
    glCallList(372);

    // Phys sci door 1
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_13));
    glCallList(373);
    // Phys sci toilets
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_14));
    glCallList(374);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_14B));
    glPushMatrix();
    glTranslatef(0.0, 0.0, 1920.0);
    glCallList(374);
    glPopMatrix();
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_15));
    glCallList(375);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_16));
    glCallList(379);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_17));
    glCallList(380);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(EXIT_EAST));
    glCallList(381);

    // Chanc Doorways
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(CHANC_DOOR_1));
    glCallList(382);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(CHANC_DOOR_2));
    glPushMatrix();
    glTranslatef(0.0, 0.0, 8640.0);
    glCallList(382);
    glPopMatrix();

    // Library windows downstairs
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_LIB_1A));
    glCallList(383);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_LIB_1));
    step = 1088.0;
    for (size_t i = 0; i < 4; i++) {
        glPushMatrix();
        glTranslated(step, 0.f, 0.f);
        glCallList(383);
        glPopMatrix();
        step += 3264;
    }

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_LIB_1B));
    step = 2176.0;
    for (size_t i = 0; i < 3; i++) {
        glPushMatrix();
        glTranslated(step, 0.f, 0.f);
        glCallList(383);
        glPopMatrix();
        step += 3264;
    }

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_LIB_1C));
    step = 3264.0;
    for (size_t i = 0; i < 3; i++) {
        glPushMatrix();
        glTranslated(step, 0.f, 0.f);
        glCallList(383);
        glPopMatrix();
        step += 3264.0;
    }

    // library windows upstairs
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_LIB_US_B));
    step = 2176.0;
    for (size_t i = 0; i < 9; i++) {
        glPushMatrix();
        glTranslated(step, 0.f, 0.f);
        glCallList(384);
        glPopMatrix();
        step += 1088.0;
    }

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_LIB_US_A));
    step = 0.0;
    glCallList(384);
    glPushMatrix();
    glTranslatef(1088.0, 0.0, 0.0);
    glCallList(384);
    glPopMatrix();

    step = 11968.0;
    for (size_t i = 0; i < 3; i++) {
        glPushMatrix();
        glTranslated(step, 0.f, 0.f);
        glCallList(384);
        glPopMatrix();
        step += 1088;
    }

    // library doorways
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_LIB_DOOR_1));
    glCallList(385);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_LIB_DOOR_2));
    glCallList(386);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOW_LIB_LONG));
    glCallList(387);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WINDOWPOST_LIB_FRONT));
    glCallList(389);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(DOOR_POST_LIB));
    glCallList(414);
    glPushMatrix();
    glTranslatef(77.0, 0.0, 0.0);
    glCallList(414);
    glPopMatrix();

    // top of toilet door
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(TOILET_DOOR_TOP));
    glCallList(422);
    glCallList(423);

    // West Exit
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(EXIT_WEST));
    glCallList(450);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(ABOVE_WINDOW_BLOCK_CHANC));
    glCallList(451);
    // window next to steps
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(STEP_WINDOW));
    glCallList(452);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(CARPET));
    glCallList(453);
}

void ShaysWorld::DrawLargerTextures() {
    // CHANC
    // Gap between chanc and phy sci y1142 z3248
    tp.CreateYtoZWindowList(350,
                            35879.0,
                            10000.0,
                            1147.0,
                            22096,
                            1540.0,
                            0.714,
                            0.95);  // w190.63  245
    tp.CreateYtoZWindowList(351,
                            35879.0,
                            10000.0,
                            1147.0,
                            23740,
                            1605.0,
                            0.714,
                            0.98);  // w183
    // chanc windows
    tp.CreateYtoZWindowList(352,
                            33895.0,
                            10256.0,
                            576.0,
                            9599.0,
                            867.0,
                            0.664,
                            1.0);  // w170
    // chanc doors
    tp.CreateYtoZWindowList(382,
                            33895.0,
                            10000.0,
                            832.0,
                            10559.0,
                            867.0,
                            0.96,
                            1.0);  // w246

    // PHYS SCI
    // phys sci upstairs
    tp.CreateYtoZWindowList(353,
                            33895.0,
                            11411.0,
                            445.0,
                            26702.0,
                            883.0,
                            0.504,
                            1.0);  // 129x256
    // phys sci toilets
    tp.CreateYtoZWindowList(354,
                            33895.0,
                            10576.0,
                            255.0,
                            27662.0,
                            883.0,
                            0.578,
                            1.0);  // 73.93x256
    // phys sci toilets 3rd
    tp.CreateYtoZWindowList(355,
                            33895.0,
                            10576.0,
                            255.0,
                            33422.0,
                            919.0,
                            0.57,
                            1.0);  // 71.04x256
    // serving window
    tp.CreateYtoZWindowList(356,
                            33895.0,
                            10320.0,
                            511.0,
                            34419.0,
                            845.0,
                            0.605,
                            1.0);  // 155x256
    // last window
    tp.CreateYtoZWindowList(357,
                            33895.0,
                            10320.0,
                            511.0,
                            38239.0,
                            320.0,
                            1.0,
                            0.626);  // 256x160.3
    // first purple post window
    tp.CreateYtoZWindowList(358,
                            33895.0,
                            10000.0,
                            832.0,
                            31519.0,
                            865.0,
                            0.96,
                            1.0);  // 246.2x256
    // second purple post window
    tp.CreateYtoZWindowList(359,
                            33895.0,
                            10000.0,
                            832.0,
                            32461.0,
                            883.0,
                            0.94,
                            1.0);  // 241.2x256
    // third purple post window
    tp.CreateYtoZWindowList(360,
                            33895.0,
                            10000.0,
                            832.0,
                            35341.0,
                            867.0,
                            0.96,
                            1.0);  // 246.2x256
    // first red window
    tp.CreateYtoZWindowList(361,
                            33865.0,
                            10000.0,
                            832.0,
                            39216.0,
                            839.0,
                            0.992,
                            1.0);  // 254.5x256
    // second red window
    tp.CreateYtoZWindowList(362,
                            33865.0,
                            10000.0,
                            832.0,
                            40151.0,
                            448.0,
                            1.0,
                            0.54);  // 256x138

    tp.CreateXtoYWindowList(363,
                            43040.0,
                            29512.0,
                            1280.0,
                            10288.0,
                            480.0,
                            1.0,
                            0.745);  // NEXUS
    tp.CreateXtoYWindowList(364,
                            43040.0,
                            28360.0,
                            896.0,
                            10320.0,
                            448.0,
                            1.0,
                            1.0);  // Glassboard 1
    tp.CreateXtoYWindowList(365,
                            43040.0,
                            24456.0,
                            896.0,
                            10320.0,
                            448.0,
                            1.0,
                            1.0);  // Glassboard 2
    tp.CreateXtoYWindowList(366,
                            43040.0,
                            7304.0,
                            768.0,
                            10256.0,
                            384.0,
                            1.0,
                            1.0);  // Glassboard 2
    tp.CreateXtoYWindowList(367,
                            42756.0,
                            25640.0,
                            2432.0,
                            10000.0,
                            902.0,
                            1.0,
                            0.742);  // KBLT

    tp.CreateYtoZWindowList(368,
                            33840.0,
                            9086.0,
                            2200.0,
                            4688.0,
                            1100.0,
                            1.0,
                            1.0);
    tp.CreateXtoYWindowList(369,
                            4688.0,
                            31632.0,
                            2208.0,
                            9086.0,
                            2208.0,
                            1.0,
                            1.0);

    tp.CreateXtoYWindowList(370,
                            25016.0,
                            35458.0,
                            317.12,
                            10000.0,
                            660.0,
                            0.96,
                            1.0);  // Coke Machine
    tp.CreateXtoYWindowList(371,
                            25016.0,
                            35163.0,
                            255.0,
                            10000.0,
                            586.2,
                            0.867,
                            1.0);  // Coffee Machine
    tp.CreateXtoYWindowList(372,
                            25016.0,
                            34778.0,
                            350.0,
                            10000.0,
                            593.22,
                            0.59,
                            1.0);  // Sweet Machine
    // phys sci door 1
    tp.CreateYtoZWindowList(373,
                            34320.0,
                            10000.0,
                            832.0,
                            26752.0,
                            552.0,
                            1.0,
                            0.66);  // 256x169.85
    // phys sci toilets
    tp.CreateYtoZWindowList(374,
                            33872.0,
                            10000.0,
                            768.0,
                            28646.0,
                            322.0,
                            1.0,
                            0.833);  // 256x106.67 toilet doors
    // phys sci door 2
    tp.CreateYtoZWindowList(375,
                            34342.0,
                            10000.0,
                            832.0,
                            36639.0,
                            1216,
                            0.68,
                            1.0);  // 256x175.16

    tp.CreateXtoYWindowList(379,
                            43152.0,
                            33232.0,
                            384.0,
                            10000.0,
                            768.0,
                            1.0,
                            1.0);  // GCL1 doorway
    tp.CreateXtoYWindowList(380,
                            43152.0,
                            32720.0,
                            384.0,
                            10000.0,
                            768.0,
                            1.0,
                            1.0);  // GCL1 doorway

    tp.CreateYtoZWindowList(381,
                            36047,
                            9422.0,
                            1410.0,
                            41127.0,
                            1929.0,
                            0.725,
                            1.0);  // Exit East  375x512

    tp.CreateXtoYWindowList(383,
                            43152.0,
                            11055.0,
                            1014.0,
                            10388.0,
                            380.0,
                            1.0,
                            0.75);  // 256x96 Library Window downstairs
    tp.CreateXtoYWindowList(384,
                            43152.0,
                            8879.0,
                            1014.0,
                            11412.0,
                            444.0,
                            1.0,
                            0.876);  // 256x112 Library Window upstairs
    tp.CreateXtoYWindowList(385,
                            43120.0,
                            8189.0,
                            614.0,
                            10000.0,
                            768.0,
                            0.781,
                            1.0);  // library door 1
    tp.CreateXtoYWindowList(386,
                            43152.0,
                            8880.0,
                            2072.0,
                            9998.0,
                            770.0,
                            1.0,
                            0.742);  // 256x136 library door 2
    tp.CreateXtoYWindowList(387,
                            43152.0,
                            23023.0,
                            1014.0,
                            10305.0,
                            464.0,
                            1.0,
                            0.914);  // silver long library window
    tp.CreateXtoYWindowList(389,
                            43096.0,
                            8803.0,
                            77.0,
                            9998.0,
                            775.0,
                            0.6,
                            1.0);  // library post
    tp.CreateYtoZWindowList(414,
                            8803.0,
                            9998.0,
                            775.0,
                            43096.0,
                            77.0,
                            1.0,
                            0.5625);  // library post
    tp.CreateYtoZWindowList(422,
                            33872.0,
                            10768.0,
                            64.0,
                            28646.0,
                            856.0,
                            1.0,
                            1.0);  // top of toilet door female
    tp.CreateYtoZWindowList(423,
                            33872.0,
                            10768.0,
                            64.0,
                            30566.0,
                            840.0,
                            1.0,
                            1.0);  // top of toilet door male
    tp.CreateYtoZWindowList(450,
                            2352.0,
                            10000.0,
                            896.0,
                            41168.0,
                            1792.0,
                            1.0,
                            1.0);  // west exit
    tp.CreateDisplayList(XZ,
                         451,
                         400.0,
                         256.0,
                         2352.0,
                         10896.0,
                         41168.0,
                         0.64,
                         7.0);  // above west exit
    tp.CreateXtoYWindowList(452,
                            41127.0,
                            35280.0,
                            320.0,
                            10128.0,
                            704.0,
                            0.91,
                            1.0);  // w 233 window by steps (end of phys sci)
    tp.CreateDisplayList(XZ,
                         453,
                         2.0,
                         2.0,
                         35856.0,
                         9400.0,
                         40500.0,
                         180.0,
                         1380.0);  // block at bottom of steps
}

// --------------------------------------------------------------------------------------
// Display grass and slopes
// --------------------------------------------------------------------------------------

void ShaysWorld::DisplayGrass() {
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(GRASS));
    glCallList(79);
    glCallList(111);
    glCallList(460);
    glCallList(477);
    for (int i = 461; i < 477; i++)
        glCallList(i);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(GRASS_2));
    glCallList(198);

    // USED IF REQUIRED DARKER HILL
    // glBindTexture(GL_TEXTURE_2D, tp.GetTexture(GRASS_HILL));
    // for (int i = 461; i < 477; i++) glCallList(i);
}

void ShaysWorld::DrawGrass() {
    tp.CreateDisplayList(XZ,
                         111,
                         64.0,
                         64.0,
                         4848.0,
                         10000.0,
                         10000.0,
                         417.5,
                         481.5);

    // Lower hill in the centre
    tp.CreateDisplayList(XZ,
                         460,
                         64.0,
                         64.0,
                         9000.0,
                         10200.0,
                         19000.0,
                         203.125,
                         281.25);
    tp.CreateAngledPolygon(461,
                           64.0,
                           64.0,
                           9000.0,
                           22000.0,
                           22000.0,
                           9000.0,
                           10000.0,
                           10000.0,
                           10200.0,
                           10200.0,
                           17000.0,
                           17000.0,
                           19000.0,
                           19000.0,
                           1,
                           1);

    tp.CreateAngledPolygon(462,
                           64.0,
                           64.0,
                           9000.0,
                           22000.0,
                           22000.0,
                           9000.0,
                           10200.0,
                           10200.0,
                           10000.0,
                           10000.0,
                           37000.0,
                           37000.0,
                           40000.0,
                           40000.0,
                           1,
                           1);

    tp.CreateAngledPolygon(463,
                           64.0,
                           64.0,
                           22000.0,
                           27000.0,
                           27000.0,
                           22000.0,
                           10200.0,
                           10000.0,
                           10000.0,
                           10200.0,
                           19000.0,
                           19000.0,
                           37000.0,
                           37000.0,
                           1,
                           1);

    tp.CreateAngledPolygon(464,
                           64.0,
                           64.0,
                           6500.0,
                           9000.0,
                           9000.0,
                           6500.0,
                           10000.0,
                           10200.0,
                           10200.0,
                           10000.0,
                           19000.0,
                           19000.0,
                           37000.0,
                           37000.0,
                           1,
                           1);

    tp.CreateAngledPolygon(465,
                           64.0,
                           64.0,
                           9000.0,
                           9000.0,
                           9000.0,
                           6500.0,
                           10000.0,
                           10000.0,
                           10200.0,
                           10000.0,
                           17000.0,
                           17000.0,
                           19000.0,
                           19000.0,
                           4,
                           1);

    tp.CreateAngledPolygon(466,
                           64.0,
                           64.0,
                           22000.0,
                           22000.0,
                           27000.0,
                           22000.0,
                           10000.0,
                           10000.0,
                           10000.0,
                           10200.0,
                           17000.0,
                           17000.0,
                           19000.0,
                           19000.0,
                           1,
                           1);

    tp.CreateAngledPolygon(467,
                           64.0,
                           64.0,
                           22000.0,
                           27000.0,
                           22000.0,
                           22000.0,
                           10200.0,
                           10000.0,
                           10000.0,
                           10000.0,
                           37000.0,
                           37000.0,
                           40000.0,
                           40000.0,
                           4,
                           1);

    tp.CreateAngledPolygon(468,
                           64.0,
                           64.0,
                           6500.0,
                           9000.0,
                           9000.0,
                           9000.0,
                           10000.0,
                           10200.0,
                           10000.0,
                           10000.0,
                           37000.0,
                           37000.0,
                           40000.0,
                           40000.0,
                           1,
                           1);

    // higher hilltop
    tp.CreateDisplayList(XZ,
                         477,
                         64.0,
                         64.0,
                         14000.0,
                         10425.0,
                         28000.0,
                         62.5,
                         78.125);

    tp.CreateAngledPolygon(469,
                           64.0,
                           64.0,
                           14000.0,
                           18000.0,
                           18000.0,
                           14000.0,
                           10200.0,
                           10200.0,
                           10425.0,
                           10425.0,
                           23000.0,
                           23000.0,
                           28000.0,
                           28000.0,
                           1,
                           1);

    tp.CreateAngledPolygon(470,
                           64.0,
                           64.0,
                           14000.0,
                           18000.0,
                           18000.0,
                           14000.0,
                           10425.0,
                           10425.0,
                           10200.0,
                           10200.0,
                           33000.0,
                           33000.0,
                           36000.0,
                           36000.0,
                           1,
                           1);

    tp.CreateAngledPolygon(471,
                           64.0,
                           64.0,
                           10000.0,
                           14000.0,
                           14000.0,
                           10000.0,
                           10200.0,
                           10425.0,
                           10425.0,
                           10200.0,
                           28000.0,
                           28000.0,
                           33000.0,
                           33000.0,
                           1,
                           1);

    tp.CreateAngledPolygon(472,
                           64.0,
                           64.0,
                           18000.0,
                           22000.0,
                           22000.0,
                           18000.0,
                           10425.0,
                           10200.0,
                           10200.0,
                           10425.0,
                           28000.0,
                           28000.0,
                           33000.0,
                           33000.0,
                           1,
                           1);

    tp.CreateAngledPolygon(473,
                           64.0,
                           64.0,
                           14000.0,
                           14000.0,
                           14000.0,
                           10000.0,
                           10200.0,
                           10200.0,
                           10425.0,
                           10200.0,
                           23000.0,
                           23000.0,
                           28000.0,
                           28000.0,
                           4,
                           1);

    tp.CreateAngledPolygon(474,
                           64.0,
                           64.0,
                           18000.0,
                           18000.0,
                           22000.0,
                           18000.0,
                           10200.0,
                           10200.0,
                           10200.0,
                           10425.0,
                           23000.0,
                           23000.0,
                           28000.0,
                           28000.0,
                           1,
                           1);

    tp.CreateAngledPolygon(475,
                           64.0,
                           64.0,
                           18000.0,
                           22000.0,
                           18000.0,
                           18000.0,
                           10425.0,
                           10200.0,
                           10200.0,
                           10200.0,
                           33000.0,
                           33000.0,
                           36000.0,
                           36000.0,
                           1,
                           1);

    tp.CreateAngledPolygon(476,
                           64.0,
                           64.0,
                           10000.0,
                           14000.0,
                           14000.0,
                           14000.0,
                           10200.0,
                           10425.0,
                           10200.0,
                           10200.0,
                           33000.0,
                           33000.0,
                           36000.0,
                           36000.0,
                           1,
                           1);
}

// --------------------------------------------------------------------------------------
// Display Light Fittings
// --------------------------------------------------------------------------------------
void ShaysWorld::DisplayLights() {
    // Light Fitting
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(LIGHT));
    GLdouble beamstep = 0.0;
    for (int i = 0; i < 4; i++) {
        glPushMatrix();
        glTranslated(32905.f, 11200.f, 11134.f + beamstep);
        glRotatef(90.0, 1.0f, 0.0f, 0.0f);
        glRotatef(-90.0, 0.0f, 0.0f, 1.0f);
        glCallList(376);
        glPopMatrix();

        glPushMatrix();
        glTranslated(32905.f, 11265.f, 11134.f + beamstep);
        glRotatef(90.0, 1.0f, 0.0f, 0.0f);
        glRotatef(-90.0, 0.0f, 0.0f, 1.0f);
        glCallList(376);
        glPopMatrix();

        glPushMatrix();
        glTranslated(32905.f, 11330.f, 11134.f + beamstep);
        glRotatef(90.0, 1.0f, 0.0f, 0.0f);
        glRotatef(-90.0, 0.0f, 0.0f, 1.0f);
        glCallList(376);
        glPopMatrix();
        beamstep += 8492.0;
    }

    // Light Supports
    beamstep = 0.0;
    for (size_t i = 0; i < 4; i++) {
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(LIGHT_SUPPORT_2));
        step = -40.0;
        for (int k = 0; k < 2; k++) {
            for (int j = 0; j < 2; j++) {
                glPushMatrix();
                glTranslated(step, 0.f, 0.f + beamstep);
                glCallList(377);
                glPopMatrix();
                glPushMatrix();
                glTranslated(step, 0.f, -40.f + beamstep);
                glCallList(377);
                glPopMatrix();
                step += 8.0;
            }
            step += 64.0;
        }

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(LIGHT_SUPPORT));
        step = -40.0;
        for (size_t k = 0; k < 2; k++) {
            step2 = 0.0;
            for (size_t j = 0; j < 2; j++) {
                glPushMatrix();
                glTranslated(step, 0.f, 0.f + step2 + beamstep);
                glCallList(378);
                glPopMatrix();
                glPushMatrix();
                glTranslated(step, 0.f, -40.f + step2 + beamstep);
                glCallList(378);
                glPopMatrix();
                step2 += 8.0;
            }
            step += 80.0;
        }
        beamstep += 8492.0;
    }
}

void ShaysWorld::DrawLights() {
    // Fittings
    glNewList(376, GL_COMPILE);
    glBegin(GL_QUADS);
    // gluQuadricDrawStyle(glu_cylinder, GLU_LINE);
    // gluCylinder(glu_cylinder, 75.0, 75.0, 60.0, 15, 100);
    glEnd();
    glEndList();

    tp.CreateDisplayList(YZ,
                         377,
                         2.0,
                         8.0,
                         32900.0,
                         11330.0,
                         11150.0,
                         220.0,
                         1.0);  // supports
    tp.CreateDisplayList(XY,
                         378,
                         8.0,
                         2.0,
                         32900.0,
                         11330.0,
                         11150.0,
                         1.0,
                         220.0);  // supports
}

// --------------------------------------------------------------------------------------
// Display drainpipe and tuckshop serving counter
// --------------------------------------------------------------------------------------

void ShaysWorld::DisplayCylinders() {
    // drainpipe
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(DRAINPIPE));
    glPushMatrix();
    glTranslatef(24200.0, 9850.0, 43090.0);
    glRotatef(90.0, 1.0f, 0.0f, 0.0f);
    glRotatef(-90.0, 0.0f, 0.0f, 1.0f);
    glRotatef(-180.0, 0.0f, 1.0f, 0.0f);
    glScalef(1.0, 1.0f, 1125.0f);
    glCallList(437);
    glPopMatrix();

    // serving counter
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(COUNTER_TOP));
    glCallList(439);
    glPushMatrix();
    glTranslatef(33800.0, 10340.0, 34848.0);
    glRotatef(90.0, 1.0f, 0.0f, 0.0f);
    glRotatef(-90.0, 0.0f, 0.0f, 1.0f);
    glCallList(441);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(COUNTER_SIDE));
    glCallList(438);
    glTranslatef(0.0, 0.0, 10.0);
    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(COUNTER_TOP));
    glCallList(441);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(COUNTER_SIDE));
    glCallList(440);
    glPushMatrix();
    glTranslatef(0.0, 0.0, 276.0);
    glCallList(440);
    glPopMatrix();
}

/*
void ShaysWorld::DrawCylinders() {
    // Drainpipe
    glNewList(437, GL_COMPILE);
    glBegin(GL_QUADS);
    gluQuadricDrawStyle(glu_cylinder, GLU_FILL);
    gluCylinder(glu_cylinder, 10.0, 10.0, 2.0, 15, 15);
    glEnd();
    glEndList();

    // Serving Counter
    glNewList(438, GL_COMPILE);
    glBegin(GL_QUADS);
    gluQuadricDrawStyle(glu_cylinder, GLU_FILL);
    gluCylinder(glu_cylinder, 138.0, 138.0, 16.0, 20, 50);
    glEnd();
    glEndList();
    glNewList(441, GL_COMPILE);
    glBegin(GL_QUADS);
    gluQuadricDrawStyle(glu_cylinder, GLU_FILL);
    gluDisk(glu_cylinder, 0.0, 138.0, 20, 50);
    glEnd();
    glEndList();

    tp.CreateDisplayList(XZ,
                         439,
                         1.0,
                         1.0,
                         33800.0,
                         10340.0,
                         34710.0,
                         120.0,
                         276.0);
    tp.CreateDisplayList(XY,
                         440,
                         4.0,
                         16.0,
                         33800.0,
                         10324.0,
                         34710.0,
                         30.0,
                         1.0);
}*/

// --------------------------------------------------------------------------------------
// Display Wall by Entrance
// --------------------------------------------------------------------------------------
void ShaysWorld::DisplayStepBricks() {
    step = 0.0;

    for (size_t j = 0; j < 2; j++) {
        glPushMatrix();
        glTranslated(step, 0.f, 0.f);
        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WALL_BRICK_STEPS));
        for (int i = 478; i < 487; i++)
            glCallList(i);

        glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WALL_BRICK_STEPS_TOP));
        for (int i = 488; i < 493; i++)
            glCallList(i);

        glPushMatrix();
        glTranslatef(31572.0, 9222.0, 6126.0);
        glRotated(-18.69f, 1.f, 0.f, 0.f);
        glTranslatef(-31572.0, -9222.0, -6126.0);
        glCallList(493);
        glPopMatrix();

        glPushMatrix();
        glTranslatef(31572.0, 9461.0, 7213.0);
        glRotated(-20.31f, 1.f, 0.f, 0.f);
        glTranslatef(-31572.0, -9462.0, -7213.0);
        glCallList(494);
        glPopMatrix();

        glPushMatrix();
        glTranslatef(31572.0, 9722.0, 8302.0);
        glRotated(-17.35f, 1.f, 0.f, 0.f);
        glTranslatef(-31572.0, -9722.0, -8302.0);
        glCallList(495);
        glPopMatrix();

        glPushMatrix();
        glTranslated(31572.f, 9939.f, 9332.4f);
        glRotated(-19.83f, 1.f, 0.f, 0.f);
        glTranslated(-31572.f, -9942.f, -9332.4f);
        glCallList(496);
        glPopMatrix();
        glPopMatrix();
        step += -64.0;
    }

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WALL_BRICK_STEPS_COVER));
    for (int i = 497; i < 502; i++)
        glCallList(i);
    glPushMatrix();
    glTranslatef(31572.0, 9222.0, 6126.0);
    glRotated(-18.69f, 1.f, 0.f, 0.f);
    glTranslatef(-31572.0, -9222.0, -6126.0);
    glCallList(502);
    glPopMatrix();

    glPushMatrix();
    glTranslatef(31572.0, 9462.0, 7213.0);
    glRotated(-20.21f, 1.f, 0.f, 0.f);
    glTranslatef(-31572.0, -9462.0, -7213.0);
    glCallList(503);
    glPopMatrix();

    glPushMatrix();
    glTranslatef(31572.0, 9722.0, 8302.0);
    glRotated(-17.35f, 1.f, 0.f, 0.f);
    glTranslatef(-31572.0, -9722.0, -8302.0);
    glCallList(504);
    glPopMatrix();

    glPushMatrix();
    glTranslated(31572.f, 9939.f, 9332.4f);
    glRotated(-19.83f, 1.0f, 0.0f, 0.0f);
    glTranslated(-31572.f, -9942.f, -9332.4f);
    glCallList(505);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WALL_BRICK_STEPS_EDGE));
    glCallList(506);

    glBindTexture(GL_TEXTURE_2D, tp.GetTexture(WALL_BRICK_STEPS_EDGE_2));
    glCallList(507);
}
void ShaysWorld::DrawStepBricks() {
    tp.CreateDisplayList(YZ,
                         478,
                         128.0,
                         128.0,
                         31582.0,
                         9914.0,
                         9872.0,
                         1.7188,
                         1.75);
    tp.CreateDisplayList(YZ,
                         488,
                         32.0,
                         128.0,
                         31582.0,
                         10134.0,
                         9868.0,
                         1.0,
                         1.78);

    tp.CreateDisplayList(YZ,
                         479,
                         128.0,
                         128.0,
                         31582.0,
                         9530.0,
                         9006.0,
                         3.21875,
                         6.0);
    tp.CreateDisplayList(YZ,
                         489,
                         32.0,
                         128.0,
                         31582.0,
                         9942.0,
                         9004.0,
                         1.0,
                         2.55);

    tp.CreateDisplayList(YZ,
                         480,
                         128.0,
                         128.0,
                         31582.0,
                         9350.0,
                         7918.0,
                         2.90625,
                         6.0);
    tp.CreateDisplayList(YZ,
                         490,
                         32.0,
                         128.0,
                         31582.0,
                         9722.0,
                         7916.0,
                         1.0,
                         3.0);

    tp.CreateDisplayList(YZ,
                         481,
                         128.0,
                         128.0,
                         31582.0,
                         9158.0,
                         6830.0,
                         2.375,
                         6.0);
    tp.CreateDisplayList(YZ,
                         491,
                         32.0,
                         128.0,
                         31582.0,
                         9462.0,
                         6830.0,
                         1.0,
                         2.99);

    tp.CreateDisplayList(YZ,
                         482,
                         128.0,
                         128.0,
                         31582.0,
                         8966.0,
                         4590.0,
                         2.0,
                         15.0);
    tp.CreateDisplayList(YZ,
                         492,
                         32.0,
                         128.0,
                         31582.0,
                         9222.0,
                         4590.0,
                         1.0,
                         12.0);

    tp.CreateAngledPolygon(483,
                           128.0,
                           128.0,
                           31582.0,
                           31582.0,
                           31582.0,
                           31582.0,
                           9094.0,
                           9094.0,
                           9462.0,
                           9094.0,
                           5742.0,
                           6830.0,
                           6830.0,
                           5742.0,
                           5,
                           1);
    tp.CreateDisplayList(YZ,
                         493,
                         32.0,
                         128.0,
                         31582.0,
                         9222.0,
                         6126.0,
                         1.0,
                         5.92);

    tp.CreateAngledPolygon(484,
                           128.0,
                           128.0,
                           31582.0,
                           31582.0,
                           31582.0,
                           31582.0,
                           9414.0,
                           9414.0,
                           9722.0,
                           9414.0,
                           7086.0,
                           7918.0,
                           7918.0,
                           7086.0,
                           5,
                           1);
    tp.CreateDisplayList(YZ,
                         494,
                         32.0,
                         128.0,
                         31582.0,
                         9462.0,
                         7213.0,
                         1.0,
                         5.93);

    tp.CreateAngledPolygon(485,
                           128.0,
                           128.0,
                           31582.0,
                           31582.0,
                           31582.0,
                           31582.0,
                           9594.0,
                           9594.0,
                           9942.0,
                           9722.0,
                           8302.0,
                           9006.0,
                           9006.0,
                           8302.0,
                           5,
                           1);
    tp.CreateDisplayList(YZ,
                         495,
                         32.0,
                         128.0,
                         31582.0,
                         9722.0,
                         8302.0,
                         1.0,
                         5.82);

    tp.CreateAngledPolygon(486,
                           128.0,
                           128.0,
                           31582.0,
                           31582.0,
                           31582.0,
                           31582.0,
                           9914.0,
                           9914.0,
                           10134.0,
                           9914.0,
                           9262.0,
                           9872.0,
                           9872.0,
                           9262.0,
                           5,
                           1);
    tp.CreateDisplayList(YZ,
                         496,
                         32.0,
                         128.0,
                         31582.0,
                         9942.0,
                         9332.4,
                         1.0,
                         4.545);

    tp.CreateDisplayList(XZ,
                         497,
                         64.0,
                         128.0,
                         31518.0,
                         10166.0,
                         9868.0,
                         1.0,
                         1.78);
    tp.CreateDisplayList(XZ,
                         498,
                         64.0,
                         128.0,
                         31518.0,
                         9974.0,
                         9004.0,
                         1.0,
                         2.55);
    tp.CreateDisplayList(XZ,
                         499,
                         64.0,
                         128.0,
                         31518.0,
                         9754.0,
                         7916.0,
                         1.0,
                         3.0);
    tp.CreateDisplayList(XZ,
                         500,
                         64.0,
                         128.0,
                         31518.0,
                         9494.0,
                         6830.0,
                         1.0,
                         2.99);
    tp.CreateDisplayList(XZ,
                         501,
                         64.0,
                         128.0,
                         31518.0,
                         9254.0,
                         4590.0,
                         1.0,
                         12.0);
    tp.CreateDisplayList(XZ,
                         502,
                         64.0,
                         128.0,
                         31518.0,
                         9254.0,
                         6126.0,
                         1.0,
                         5.92);
    tp.CreateDisplayList(XZ,
                         503,
                         64.0,
                         128.0,
                         31518.0,
                         9494.0,
                         7213.0,
                         1.0,
                         5.95);
    tp.CreateDisplayList(XZ,
                         504,
                         64.0,
                         128.0,
                         31518.0,
                         9754.0,
                         8302.0,
                         1.0,
                         5.82);
    tp.CreateDisplayList(XZ,
                         505,
                         64.0,
                         128.0,
                         31518.0,
                         9974.0,
                         9332.4,
                         1.0,
                         4.545);
    tp.CreateDisplayList(XY,
                         506,
                         64.0,
                         32.0,
                         31518.0,
                         10134.0,
                         10095.84,
                         1.0,
                         1.0);
    tp.CreateDisplayList(XY,
                         507,
                         64.0,
                         64.0,
                         31518.0,
                         9914.0,
                         10095.84,
                         1.0,
                         3.4376);
}

//--------------------------------------------------------------------------------------
//  Map and Welcome screens
//--------------------------------------------------------------------------------------
void ShaysWorld::DrawMapExit() {
    tp.CreateDisplayList(0,
                         448,
                         256.0,
                         256.0,
                         10.0,
                         10.0,
                         0.0,
                         0.855,
                         1.0);  // map
    tp.CreateDisplayList(0,
                         449,
                         512.0,
                         512.0,
                         0.0,
                         0.0,
                         0.0,
                         1.0,
                         1.0);  // welcome screen
    tp.CreateDisplayList(0,
                         454,
                         256.0,
                         64.0,
                         0.0,
                         0.0,
                         0.0,
                         1.0,
                         1.0);  // welcome screen
    tp.CreateDisplayList(4,
                         455,
                         512.0,
                         512.0,
                         0.0,
                         0.0,
                         0.0,
                         1.0,
                         1.0);  // New Exit sign
}

//--------------------------------------------------------------------------------------
//  Create display lists
//	Numbers indicate list numbers
//--------------------------------------------------------------------------------------
void ShaysWorld::CreateTextureList() {
    DrawGrass();             // 79, 111, 198, 460-477
    DrawChancPosts();        // 11-15, 235-237
    DrawDoorPosts();         // 25-27, 199
    DrawAboveWindowBlock();  // 20-24, 39, 43-46, 49-50, 53-56, 64-72, 95-96
                             // 208-213, 223-234, 238-239, 415, 424-425
    DrawPurplePosts();       // 29-32
    DrawRedPosts();          // 33-35
    DrawPhysSciPosts();      // 16-17, 36-38, 40-42
    DrawDoorPaving();        // 47-48
    DrawLibraryPosts();      // 57-63, 442-447
    DrawMainPosts();         // 18-19, 51-52
    DrawPavement();          // 28, 73-94, 240-249, 428, 436
    DrawBricks();  // 101-110, 112-169, 180-197, 200-201, 390-399, 430-434
    DrawRoof();    // 1-10, 97-100, 170-179, 202-205, 214-222, 250-257, 296-299,
                   // 426-427
    DrawEntranceSteps();   // 258-295, 206-207
    DrawExtras();          // 300-349, 388, 395, 419-421, 429, 435
    DrawLargerTextures();  // 350-375, 379-387, 389, 414-418, 422-423, 450-453
    DrawLights();          // 376-378
    DrawBench();           // 400-413
    DrawStepBricks();      // 478-507
    // DrawCylinders();       // 437-441
    DrawMapExit();  // 448-449, 454
                    // 455-459
}