src/devlicks.c
author Tampax86
Thu, 17 Jul 2025 22:03:19 -0400
changeset 0 b2e3aa63e96c
permissions -rw-r--r--
First commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     1
/*
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     2
Copyright (c) 2023 MCL Software
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     3
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     4
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     5
to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     6
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     7
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     8
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     9
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    10
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    11
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    12
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    13
*/
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    14
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    15
#include "kbdinput.h"
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    16
#include "draw.h"
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    17
#include "texture.h"
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    18
#include "intro.h"
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    19
#include "level.h"
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    20
#include "common.h"
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    21
#include <stdio.h>
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    22
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    23
SDL_Point offset;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    24
Player player;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    25
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    26
int stealProgress = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    27
Uint64 now = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    28
Uint64 then = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    29
bool fireAlarmSystemActivated = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    30
bool missionScreenShown = 1;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    31
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    32
float applyZoomFactor(float i)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    33
{
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    34
    if(zoomFactor > 0)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    35
    {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    36
        i *= zoomFactor;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    37
    }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    38
    else
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    39
    {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    40
        i /= -zoomFactor;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    41
    }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    42
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    43
    return i;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    44
}
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    45
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    46
void updateZoomFactor()
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    47
{
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    48
    destRect.w = applyZoomFactor(TILE_WIDTH);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    49
    destRect.h = applyZoomFactor(TILE_HEIGHT);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    50
}
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    51
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    52
void drawTiles()
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    53
{
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    54
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    55
    for(int y = 0; y < 4; y ++)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    56
    {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    57
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    58
        for(int i = (player.x < 64 ? 0 : player.x - 63); i < (player.x + 64 < LEVEL_WIDTH ? player.x + 64 : LEVEL_WIDTH); i ++)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    59
        {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    60
            for(int j = (player.y < 64 ? 0 : player.y - 63); j < (player.y + 64 < LEVEL_DEPTH ? player.y + 64 : LEVEL_DEPTH); j ++)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    61
            {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    62
                SDL_Point coords = tileToPixelCoordinates(i, j);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    63
                destRect.x = applyZoomFactor(coords.x + offset.x) + applyZoomFactor(LEVEL_WIDTH);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    64
                destRect.y = applyZoomFactor(coords.y + offset.y) - applyZoomFactor(LEVEL_HEIGHT);;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    65
                destRect.y -= applyZoomFactor(TILE_HEIGHT / 2 * y);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    66
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    67
                // Transform coordinates according to rotation formula
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    68
                SDL_Point trans = getLevelTransformation(i, j);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    69
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    70
                // Check what tile is currently being drawn; this will later be needed
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    71
                // to determine how it should be drawn.
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    72
                Object object = getObjectFromIdent(levelTiles[trans.x * LEVEL_WIDTH + trans.y]);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    73
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    74
                SDL_Point textureClip;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    75
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    76
                // Get the tile's texture
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    77
                if(object.textureHeight == 2 && y == object.placementHeight + 1)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    78
                    // For tiles with a texture higher than TILE_HEIGHT
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    79
                    textureClip = getTextureFromIndex(object.textureIndex - 16);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    80
                else
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    81
                    textureClip = getTextureFromIndex(object.textureIndex);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    82
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    83
                // Multiply coordinates by tile width and height to get the real coordinates on the tilemap
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    84
                clip.x = textureClip.x * 89;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    85
                clip.y = textureClip.y * 90;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    86
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    87
                // This sets the destination rectangle's width and height
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    88
                // TODO: figure out a more efficient way to do this without calling this function for every tile
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    89
                updateZoomFactor();
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    90
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    91
                if(y < object.placementHeight + object.height && y >= object.placementHeight)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    92
                    SDL_RenderCopyEx(renderer, tilemap, &clip, &destRect, 0, 0, SDL_FLIP_HORIZONTAL ? orientation % 2 == 0 ? object.flipTexture : !object.flipTexture : 0);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    93
                else if(y == 0 && object.renderUnder)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    94
                    // Render tile at Y: 0 for tiles that are transparent and/or above the ground
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    95
                    SDL_RenderCopy(renderer, tilemap, &(SDL_Rect){89, 0, 89, 90}, &destRect);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    96
                else if(y == 3 && object.renderAbove)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    97
                {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    98
                    SDL_RenderCopy(renderer, tilemap, &(SDL_Rect){356, 0, 89, 90}, &destRect);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    99
                }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   100
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   101
                //SDL_Point transPlayer = getTransformation(player.x, player.y);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   102
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   103
                // Render player
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   104
                if(y == 1 && trans.x == player.x && trans.y == player.y)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   105
                {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   106
                    textureClip = getTextureFromIndex(33);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   107
                    clip.x = textureClip.x * 89;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   108
                    clip.y = textureClip.y * 90;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   109
                    clip.w = 89;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   110
                    clip.h = 90;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   111
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   112
                    //SDL_Point newDestRect = getTransformation(applyZoomFactor(coords.x + offset.x) + applyZoomFactor(LEVEL_WIDTH), applyZoomFactor(coords.y + offset.y) - applyZoomFactor(LEVEL_HEIGHT));
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   113
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   114
                    //destRect.x = newDestRect.x;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   115
                    //destRect.y = newDestRect.y;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   116
                    //destRect.y -= applyZoomFactor(TILE_HEIGHT / 2 * y);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   117
                    SDL_RenderCopy(renderer, tilemap, &clip, &destRect);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   118
                }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   119
            }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   120
        }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   121
    }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   122
}
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   123
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   124
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   125
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   126
Object getObjectProperties(char object)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   127
{
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   128
    Object objectProps;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   129
    objectProps.textureIndex = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   130
    objectProps.stealable = true;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   131
    objectProps.height = 2;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   132
    objectProps.interactable = -1;;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   133
    objectProps.passable = false;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   134
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   135
    return objectProps;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   136
}
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   137
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   138
int main(int argc, char *argv[])
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   139
{
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   140
    loadLevelFromFile();
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   141
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   142
    initMissions();
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   143
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   144
    SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_AUDIO);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   145
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   146
    Mix_Init(MIX_INIT_OGG);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   147
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   148
    Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 2048);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   149
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   150
    alarmSound = Mix_LoadWAV("alarm.wav");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   151
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   152
    themeSong = Mix_LoadMUS("audio/music/DeviousLicks.ogg");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   153
    bgm1 = Mix_LoadMUS("audio/music/Class1.ogg");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   154
    bgm2 = Mix_LoadMUS("audio/music/Class2.ogg");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   155
    bgm3 = Mix_LoadMUS("audio/music/Class3.ogg");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   156
    bgm4 = Mix_LoadMUS("audio/music/ANewReality.ogg"); // todo: move this track further down
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   157
    bgm5 = Mix_LoadMUS("audio/music/Recollection.ogg");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   158
    bgm6 = Mix_LoadMUS("audio/music/TheSadReality1.ogg");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   159
    bgm7 = Mix_LoadMUS("audio/music/TheSadReality2.ogg");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   160
    bgm8 = Mix_LoadMUS("audio/music/TheXXXReality.ogg");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   161
    bgm9 = Mix_LoadMUS("audio/music/FirstDay.ogg");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   162
    bgm10 = Mix_LoadMUS("audio/music/FirstDayAlternateVersion.ogg");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   163
    bgm11 = Mix_LoadMUS("audio/music/Hallway1.ogg");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   164
    bgm12 = Mix_LoadMUS("audio/music/Hallway2.ogg");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   165
    bgm13 = Mix_LoadMUS("audio/music/Hallway3.ogg");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   166
    bgm14 = Mix_LoadMUS("audio/music/Hallway4.ogg");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   167
    //creditsTheme = Mix_LoadMUS("audio/music/Credits.ogg");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   168
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   169
    Mix_PlayMusic(themeSong, -1);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   170
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   171
    SDL_Window* window = SDL_CreateWindow("Devious Licks", 170, 70, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   172
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   173
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   174
    initGraphics();
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   175
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   176
    SDL_Event event;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   177
    bool quit = false;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   178
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   179
    // Title Screen
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   180
    while(!gameRunning)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   181
    {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   182
        drawTitleScreen();
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   183
        while(SDL_PollEvent(&event))
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   184
        {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   185
            handleKeyboard(event);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   186
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   187
            if(!performMenuKeyActions() || event.type == SDL_QUIT)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   188
            {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   189
                gameRunning = 1;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   190
                quit = true;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   191
            }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   192
        }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   193
    }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   194
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   195
    // Intro
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   196
    // 0 - enabled
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   197
    // 1 - disabled (skip)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   198
    gameRunning = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   199
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   200
    Mix_PlayMusic(bgm7, -1);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   201
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   202
    while(!gameRunning && !quit)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   203
    {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   204
        if(INTR_DrawIntro())
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   205
            gameRunning = 1;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   206
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   207
        while(SDL_PollEvent(&event))
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   208
        {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   209
            handleKeyboard(event);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   210
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   211
            if(event.type == SDL_QUIT)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   212
            {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   213
                gameRunning = 1;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   214
                quit = true;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   215
            }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   216
        }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   217
    }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   218
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   219
    Mix_HaltMusic();
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   220
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   221
    srand(time(0)); // set seed for pseudoRNG with RTC
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   222
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   223
    /*int nextTrack = rand() % 16;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   224
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   225
    Mix_PlayMusic(nextTrack == 0 ? bgm1 : nextTrack == 1 ? bgm2 : nextTrack == 2 ? bgm3 : nextTrack == 3 ? bgm4 : nextTrack == 4 ? bgm5 : nextTrack == 5 ? bgm6 : nextTrack == 6 ? bgm7 : nextTrack == 7 ? bgm8 : nextTrack == 8 ? bgm9 : nextTrack == 9 ? bgm10 : nextTrack == 10 ? bgm11 : nextTrack == 11 ? bgm12 : nextTrack == 12 ? bgm13 : bgm14, 1);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   226
    */
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   227
    clip = (SDL_Rect){89, 0, 89, 90};
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   228
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   229
    destRect.x = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   230
    destRect.y = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   231
    updateZoomFactor();
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   232
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   233
    offset.x = -2420;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   234
    offset.y = -1870;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   235
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   236
    player.x = 75;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   237
    player.y = 25;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   238
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   239
    while(!quit)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   240
    {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   241
        now = SDL_GetTicks();
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   242
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   243
        SDL_RenderClear(renderer);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   244
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   245
        //SDL_GetMouseState(&mouseX, &mouseY);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   246
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   247
        drawTiles();
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   248
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   249
        if(levelTiles[(player.x + 1) * LEVEL_WIDTH + player.y] == 'D' || levelTiles[(player.x - 1) * LEVEL_WIDTH + player.y] == 'D' || levelTiles[player.x * LEVEL_WIDTH + player.y + 1] == 'D' || levelTiles[player.x * LEVEL_WIDTH + player.y - 1] == 'D')
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   250
        {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   251
            drawLeaveSchool();
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   252
            player.leftCampus = performYesNo() ? true : false;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   253
        }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   254
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   255
        drawHUD();
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   256
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   257
        if(missionScreenShown && drawMissionScreen())
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   258
        {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   259
            missionScreenShown = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   260
        }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   261
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   262
        if(checkForMissionComplete(currentMission))
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   263
        {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   264
            drawGoToExit();
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   265
            if(player.leftCampus)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   266
            {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   267
                offset.x = -2420;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   268
                offset.y = -1870;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   269
                player.x = 75;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   270
                player.y = 25;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   271
                if(drawMissionComplete())
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   272
                {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   273
                    missionScreenShown = 1;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   274
                }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   275
            }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   276
        }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   277
        SDL_SetRenderDrawColor(renderer, 10, 180, 255, 255);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   278
        SDL_RenderPresent(renderer);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   279
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   280
        // Cycle music
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   281
        if(!Mix_PlayingMusic())
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   282
        {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   283
            int nextTrack = rand() % 16;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   284
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   285
            Mix_PlayMusic(nextTrack == 0 ? bgm1 : nextTrack == 1 ? bgm2 : nextTrack == 2 ? bgm3 : nextTrack == 3 ? bgm4 : nextTrack == 4 ? bgm5 : nextTrack == 5 ? bgm6 : nextTrack == 6 ? bgm7 : nextTrack == 7 ? bgm8 : nextTrack == 8 ? bgm9 : nextTrack == 9 ? bgm10 : nextTrack == 10 ? bgm11 : nextTrack == 11 ? bgm12 : nextTrack == 12 ? bgm13 : bgm14, 1);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   286
        }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   287
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   288
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   289
        // Handle all queued events
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   290
        while(SDL_PollEvent(&event))
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   291
        {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   292
            handleKeyboard(event);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   293
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   294
            if(event.type == SDL_QUIT)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   295
                quit = true;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   296
        }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   297
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   298
        if(now - then > 100)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   299
        {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   300
            if(performPlayerMovement())
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   301
                then = now;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   302
        }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   303
    }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   304
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   305
    SDL_RemoveTimer(fireAlarmTimer);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   306
    SDL_DestroyWindow(window);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   307
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   308
    return ISOL_Terminate();
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   309
}