/* Copyright (C) 2015-2019 Parallel Realities This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef REVISION #define REVISION 0 #endif #ifndef DATA_DIR #define DATA_DIR "" #endif #ifndef FIXED_RESOLUTION #define FIXED_RESOLUTION 0 #endif #ifndef AUDIO_FREQUENCY #define AUDIO_FREQUENCY 44100 #endif #ifndef AUDIO_CHANNELS #define AUDIO_CHANNELS 2 #endif #ifndef AUDIO_CHUNKSIZE #define AUDIO_CHUNKSIZE 1024 #endif #ifndef AUDIO_MIX_CHANNELS #define AUDIO_MIX_CHANNELS 64 #endif #define _(string) getTranslatedString(string) #define PI 3.14159265358979323846 #define MIN(a,b) (((a)<(b))?(a):(b)) #define MAX(a,b) (((a)>(b))?(a):(b)) #define CAROLINE(a,b) MIN(a,b) #define STRNCPY(dest, src, n) strncpy(dest, src, n); dest[n - 1] = '\0' #define TO_RAIDANS(angleDegrees) (angleDegrees * PI / 180.0) #define TO_DEGREES(angleRadians) (angleRadians * 180.0 / PI) #define SAVE_FILENAME "game.save" #define CONFIG_FILENAME "config.json" #define SCREEN_WIDTH 1280 #define SCREEN_HEIGHT 720 #define UI_WIDTH 1280 #define UI_HEIGHT 720 #define MAX_KEYBOARD_KEYS 350 #define MAX_MOUSE_BUTTONS 6 #define FPS 60 #define MAX_NAME_LENGTH 32 #define MAX_DESCRIPTION_LENGTH 512 #define MAX_LINE_LENGTH 1024 #define MAX_FILENAME_LENGTH 1024 #define MAX_PATH_LENGTH 4096 #define NUM_TEXTURE_BUCKETS 32 #define NUM_ATLAS_BUCKETS 64 #define NUM_GLYPH_BUCKETS 128 #define MAX_STARS 500 #define MAX_CHALLENGES 3 #define MAX_FIGHTER_GUNS 12 #define MAX_TARGET_RANGE 65536 #define MAX_SYSTEM_POWER 100 #define BATTLE_AREA_CELLS 50 #define BATTLE_AREA_WIDTH (640 * BATTLE_AREA_CELLS) #define BATTLE_AREA_HEIGHT (360 * BATTLE_AREA_CELLS) #define BATTLE_AREA_EDGE 250 #define BF_NONE 0 #define BF_ENGINE (2 << 0) #define BF_SYSTEM_DAMAGE (2 << 1) #define BF_SHIELD_DAMAGE (2 << 2) #define BF_EXPLODES (2 << 3) #define EF_NONE 0 #define EF_NO_KILL (2 << 0) #define EF_DISABLED (2 << 1) #define EF_IMMORTAL (2 << 2) #define EF_MISSION_TARGET (2 << 3) #define EF_NO_MT_BOX (2 << 4) #define EF_HAS_ROPE (2 << 5) #define EF_COLLECTS_ITEMS (2 << 6) #define EF_MUST_DISABLE (2 << 7) #define EF_RETREATING (2 << 8) #define EF_NO_EPIC (2 << 9) #define EF_STATIC (2 << 10) #define EF_TAKES_DAMAGE (2 << 11) #define EF_SECONDARY_TARGET (2 << 12) #define EF_AI_TARGET (2 << 13) #define EF_AI_LEADER (2 << 14) #define EF_ROPED_ATTACHED (2 << 15) #define EF_NO_KILL_INC (2 << 16) #define EF_SHORT_RADAR_RANGE (2 << 17) #define EF_NO_PLAYER_TARGET (2 << 18) #define EF_AI_IGNORE (2 << 19) #define EF_NON_SOLID (2 << 20) #define EF_NO_HEALTH_BAR (2 << 21) #define EF_FRIENDLY_HEALTH_BAR (2 << 22) #define EF_NO_THREAT (2 << 23) #define EF_DROPS_ITEMS (2 << 24) #define EF_COMMON_FIGHTER (2 << 25) #define AIF_NONE 0 #define AIF_FOLLOWS_PLAYER (2 << 0) #define AIF_MOVES_TO_PLAYER (2 << 1) #define AIF_UNLIMITED_RANGE (2 << 2) #define AIF_COLLECTS_ITEMS (2 << 3) #define AIF_TOWS (2 << 4) #define AIF_RETREATS (2 << 5) #define AIF_GOAL_JUMPGATE (2 << 6) #define AIF_AVOIDS_COMBAT (2 << 7) #define AIF_DEFENSIVE (2 << 8) #define AIF_MISSILE_BOAT (2 << 9) #define AIF_AGGRESSIVE (2 << 10) #define AIF_LONG_RANGE_FIRE (2 << 11) #define AIF_MOVES_TO_LEADER (2 << 12) #define AIF_EVADE (2 << 13) #define AIF_WANDERS (2 << 14) #define AIF_COVERS_RETREAT (2 << 15) #define AIF_TARGET_FOCUS (2 << 16) #define AIF_DROPS_MINES (2 << 17) #define AIF_ASSASSIN (2 << 18) #define AIF_SUSPICIOUS (2 << 19) #define AIF_ZAK_SUSPICIOUS (2 << 20) #define AIF_SURRENDERS (2 << 21) #define AIF_SURRENDERING (2 << 22) #define AIF_SURRENDERED (2 << 23) /* player abilities */ #define BOOST_RECHARGE_TIME (FPS * 7) #define BOOST_FINISHED_TIME (FPS * 0.75) #define ECM_RECHARGE_TIME (FPS * 7) #define MB_NORMAL 0 #define MB_IMPORTANT 1 #define MB_PANDORAN 2 #define SS_NORMAL 0 #define SS_SOL 1 #define SS_PANDORAN 2 #define MAX_SUSPICION_LEVEL 1500.0 #define MAX_ZAK_SUSPICION_LEVEL (FPS * 30) enum { CONTROL_FIRE, CONTROL_ACCELERATE, CONTROL_BOOST, CONTROL_ECM, CONTROL_BRAKE, CONTROL_TARGET, CONTROL_MISSILE, CONTROL_GUNS, CONTROL_RADAR, CONTROL_PREV_FIGHTER, CONTROL_NEXT_FIGHTER, CONTROL_SCREENSHOT, CONTROL_MAX }; enum { MD_NONE, MD_OK, MD_OK_CANCEL }; enum { ET_FIGHTER, ET_ITEM, ET_WAYPOINT, ET_COMPONENT_GUN, ET_COMPONENT_ENGINE, ET_COMPONENT, ET_CAPITAL_SHIP, ET_JUMPGATE, ET_MINE, ET_SHADOW_MINE }; enum { TA_LEFT, TA_RIGHT, TA_CENTER }; enum { ALIVE_ALIVE, ALIVE_DYING, ALIVE_DEAD, ALIVE_ESCAPED }; enum { SIDE_NONE, SIDE_ALLIES, SIDE_TZAC, SIDE_PANDORAN, SIDE_PIRATE, SIDE_MERC, SIDE_CSN, SIDE_UNF, SIDE_MAX }; enum { BT_NONE, BT_PARTICLE, BT_PLASMA, BT_LASER, BT_MAG, BT_ROCKET, BT_MISSILE, BT_MAX }; enum { DT_ANY, DT_NO_SPIN, DT_INSTANT, DT_SIMPLE }; enum { EFFECT_POINT, EFFECT_LINE, EFFECT_TEXTURE, EFFECT_HALO, EFFECT_ECM }; enum { SND_PARTICLE, SND_PLASMA, SND_LASER, SND_MAG, SND_ARMOUR_HIT, SND_SHIELD_HIT, SND_SHIELD_BREAK, SND_EXPLOSION_1, SND_EXPLOSION_2, SND_EXPLOSION_3, SND_EXPLOSION_4, SND_EXPLOSION_5, SND_GET_ITEM, SND_MISSILE, SND_INCOMING, SND_SELECT_WEAPON, SND_JUMP, SND_ECM, SND_MAG_HIT, SND_POWER_DOWN, SND_BOOST, SND_RADIO, SND_TROPHY, SND_MINE_WARNING, SND_TIME_WARNING, SND_CAP_DEATH, SND_GUI_CLICK, SND_GUI_SELECT, SND_GUI_CLOSE, SND_GUI_DENIED, SND_ZOOM, SND_NEW_OBJECTIVE, SND_NO_MISSILES, SND_RECHARGED, SND_TOW_ROPE, SND_OBJECTIVE_COMPLETE, SND_OBJECTIVE_FAILED, SND_WAYPOINT, SND_MAX }; enum { OS_INCOMPLETE, OS_COMPLETE, OS_FAILED, OS_CONDITION, OS_MAX }; enum { TT_DESTROY, TT_DISABLE, TT_WAYPOINT, TT_ESCAPED, TT_ITEM, TT_STOLEN, TT_MISC }; enum { MS_START, MS_IN_PROGRESS, MS_PAUSED, MS_COMPLETE, MS_FAILED, MS_TIME_UP }; enum { WT_BUTTON, WT_IMG_BUTTON, WT_SELECT, WT_SELECT_BUTTON, WT_CONTROL_CONFIG }; enum { CHALLENGE_ARMOUR, CHALLENGE_TIME, CHALLENGE_SHOT_ACCURACY, CHALLENGE_ROCKET_ACCURACY, CHALLENGE_MISSILE_ACCURACY, CHALLENGE_NO_LOSSES, CHALLENGE_1_LOSS, CHALLENGE_LOSSES, CHALLENGE_PLAYER_KILLS, CHALLENGE_DISABLE, CHALLENGE_ITEMS, CHALLENGE_PLAYER_ITEMS, CHALLENGE_RESCUE, CHALLENGE_SURVIVE, CHALLENGE_SURRENDER, CHALLENGE_WAYPOINTS, CHALLENGE_MAX }; enum { STAT_PERCENT_COMPLETE, STAT_MISSIONS_STARTED, STAT_MISSIONS_COMPLETED, STAT_OPTIONAL_COMPLETED, STAT_CHALLENGES_STARTED, STAT_CHALLENGES_COMPLETED, STAT_SHOTS_FIRED, STAT_SHOTS_HIT, STAT_SHOT_ACCURACY, STAT_ROCKETS_FIRED, STAT_ROCKETS_HIT, STAT_ROCKET_ACCURACY, STAT_MISSILES_FIRED, STAT_MISSILES_HIT, STAT_MISSILE_ACCURACY, STAT_ENEMIES_KILLED, STAT_ENEMIES_KILLED_PLAYER, STAT_ALLIES_KILLED, STAT_PLAYER_KILLED, STAT_ENEMIES_DISABLED, STAT_ENEMIES_ESCAPED, STAT_ECM, STAT_BOOST, STAT_MISSILES_EVADED, STAT_MISSILES_STRUCK, STAT_CIVILIANS_RESCUED, STAT_CIVILIANS_KILLED, STAT_TUG, STAT_SHUTTLE, STAT_NUM_TOWED, STAT_ITEMS_COLLECTED, STAT_ITEMS_COLLECTED_PLAYER, STAT_WAYPOINTS_VISITED, STAT_EPIC_KILL_STREAK, STAT_CAPITAL_SHIPS_DESTROYED, STAT_CAPITAL_SHIPS_LOST, STAT_MINES_DESTROYED, STAT_ENEMIES_SURRENDERED, /* add stats before here, so as not to mess up the stats screen */ STAT_TIME, STAT_MAX }; enum { TROPHY_BRONZE, TROPHY_SILVER, TROPHY_GOLD, TROPHY_PLATINUM, TROPHY_UNEARNED, TROPHY_MAX };