src/missions.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 "missions.h"
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    16
#include "effects.h"
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    17
#include "kbdinput.h"
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    18
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    19
Mission* missions;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    20
Uint8 currentMission = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    21
static int missionInProgress = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    22
static char* missionTextDisplayed[900];
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    23
static int placesFromLeft = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    24
static char* text[200];
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    25
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    26
bool checkForMissionComplete(Uint8 mission)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    27
{
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    28
    bool flag = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    29
    int occurences = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    30
    for(int i = 0; i < strlen(missions[mission].requirements); i++)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    31
    {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    32
        for(int j = 0; j < sizeof player.objectsStolen; j++)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    33
        {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    34
            if(player.objectsStolen[j] == missions[mission].requirements[i])
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    35
            {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    36
                flag = 1;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    37
            }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    38
        }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    39
    }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    40
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    41
    return flag;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    42
}
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    43
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    44
void initMissions()
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    45
{
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    46
    missions = malloc(sizeof(Mission) * 6);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    47
    missions[0].desc          = "Steal a soap dispenser";
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    48
    missions[0].requirements  = "S";
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    49
    missions[0].requiredTools = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    50
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    51
    missions[1].desc          = "Steal a soap dispenser and a hand dryer.";
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    52
    missions[1].requirements  = "S&";
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    53
    missions[1].requiredTools = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    54
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    55
    missions[2].desc          = "Steal two hand dryers";
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    56
    missions[2].requirements  = "&&";
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    57
    missions[2].requiredTools = 1;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    58
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    59
    missions[3].desc          = "Steal a fire alarm strobe light";
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    60
    missions[3].requirements  = "~";
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    61
    missions[3].requiredTools = 1;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    62
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    63
    missions[4].desc          = "Steal a fire alarm pull station* and two strobe lights\n\n*Removing the pull station will likely set off the fire alarm system!";
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    64
    missions[4].requirements  = "T~~";
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    65
    missions[4].requiredTools = 1;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    66
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    67
    missions[5].desc          = "Steal a drinking fountain";
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    68
    missions[5].requirements  = "F";
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    69
    missions[5].requiredTools = 2;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    70
}
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    71
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    72
bool drawMissionScreen()
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    73
{
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    74
    if(missionInProgress)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    75
    {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    76
        if(placesFromLeft != -1)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    77
        {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    78
            strncpy(missionTextDisplayed, text, placesFromLeft);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    79
            placesFromLeft = ISOL_TypingEffect(strlen(text));
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    80
        }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    81
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    82
        SDL_SetRenderDrawColor(renderer, 0, 0, 0, 180);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    83
        SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    84
        SDL_RenderFillRect(renderer, &(SDL_Rect){0, SCREEN_HEIGHT / 4, SCREEN_WIDTH, SCREEN_HEIGHT - SCREEN_HEIGHT / 2});
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    85
        FC_SetDefaultColor(font, (SDL_Color){255, 255, 255, 255});
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    86
        FC_DrawAlign(font, renderer, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 3, FC_ALIGN_CENTER, "%s", missionTextDisplayed);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    87
        SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    88
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    89
        if(placesFromLeft == -1 && keysHeldDown[40])
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    90
        {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    91
            placesFromLeft = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    92
            missionInProgress = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    93
            memset(missionTextDisplayed, 0, strlen(missionTextDisplayed)); // Clear the string to prevent future issues
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    94
            player.canMove = true;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    95
            return 1;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    96
        }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    97
    }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    98
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    99
    else
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   100
    {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   101
        player.canMove = false;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   102
        sprintf(text, "MISSION #%i\n%s\nTools required: %s\nPress ENTER to proceed. ", currentMission + 1, missions[currentMission].desc, missions[currentMission].requiredTools == 0 ? "None" : missions[currentMission].requiredTools == 1 ? "Screwdriver" : "Screwdriver and wrench");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   103
        missionInProgress = 1;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   104
    }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   105
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   106
    return 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   107
}
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   108
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   109
bool drawMissionComplete()
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   110
{
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   111
    SDL_SetRenderDrawColor(renderer, 0, 0, 0, 180);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   112
    SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   113
    SDL_RenderFillRect(renderer, &(SDL_Rect){0, SCREEN_HEIGHT / 4, SCREEN_WIDTH, SCREEN_HEIGHT - SCREEN_HEIGHT / 2});
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   114
    FC_SetDefaultColor(font, (SDL_Color){0, 255, 40, 255});
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   115
    FC_DrawAlign(font, renderer, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, FC_ALIGN_CENTER, "Mission #%i complete!\nPress ENTER to acknowledge.", currentMission + 1);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   116
    SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   117
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   118
    if(keysHeldDown[40])
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   119
    {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   120
        memset(player.objectsStolen, 0, strlen(player.objectsStolen));
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   121
        player.leftCampus = false;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   122
        currentMission += 1;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   123
        return 1;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   124
    }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   125
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   126
    return 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   127
}
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   128
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   129
/*
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   130
missions[0] = {"S", "Steal a soap dispenser", 0};
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   131
missions[1] = {"SS", "Steal a soap dispenser and a ", 0};
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   132
missions[2] = {"&&", "Steal two hand dryers", 1};
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   133
missions[3] = {"~", "Steal a fire alarm strobe light", 1};
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   134
missions[4] = {"T~~", "Steal a fire alarm pull station* and two strobe lights\n\n*Removing the pull station will likely set off the fire alarm system!", 1};
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   135
missions[5] = {"F", "Steal a drinking fountain", 2};*/
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   136
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   137
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   138