#pragma once #include "misn_lua.h" // Availability by location. #define MIS_AVAIL_NONE 0 #define MIS_AVAIL_COMPUTER 1 #define MIS_AVAIL_BAR 2 #define MIS_AVAIL_OUTFIT 3 #define MIS_AVAIL_SHIPYARD 4 #define MIS_AVAIL_LAND 5 // Flags. #define mis_isFlag(m,f) ((m)->flags & (f)) #define mis_setFlag(m,f) ((m)->flags |= (f)) #define mis_rmFlag(m,f) ((m)->flags ^= (f)) #define MISSION_UNIQUE 1 // Unique missions can't be repeated. // Static mission data. typedef struct MissionData_ { char* name; // the name of the mission. // Availability. struct { int loc; // Location. int chance; // Chance of it appearing. // For specific cases. char* planet; char* system; // For generic cases. int* factions; int nfactions; char* req; // Required variable. } avail; unsigned int flags; // Flags to store binary properties. char* lua; } MissionData; // Active mission. typedef struct Mission_ { MissionData* data; // Unique mission identifier, used for keeping track of hooks. unsigned int id; char* title; // Not to be confused with name.. char* desc; // Description of the mission. char* reward; // Rewards - in text. // Mission cargo give to the player - Need to cleanup. unsigned int* cargo; int ncargo; lua_State* L; // The state of the running lua code. } Mission; #define MISSION_MAX 6 // No sense in the player having unlimited missions.. extern Mission player_missions[MISSION_MAX]; // For mission computer. Mission* missions_computer(int* n, int faction, char* planet, char* system); // Player accepted mission - mission computer. int mission_accept(Mission* mission); void missions_bar(int faction, char* planet, char* system); // Misc. int mission_getID(MissionData* misn); MissionData* mission_get(int id); // Cargo stuff. void mission_linkCargo(Mission* misn, unsigned int cargo_id); void mission_unlinkCargo(Mission* misn, unsigned int cargo_id); // Load/Quit. int missions_load(void); void mission_cleanup(Mission* misn); void missions_free(void); void missions_cleanup(void);