/*
Copyright (C) 2003 Parallel Realities
Copyright (C) 2011, 2012 Guus Sliepen
-Copyright (C) 2012, 2015 Julian Marchant
+Copyright (C) 2012, 2015, 2016 onpon4 <onpon4@riseup.net>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
#ifndef DEFS_H
#define DEFS_H
+#include <stdlib.h>
+
+
+// Macros
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define LIMIT(x, a, b) x = ((x) < (b) ? ((x) > (a) ? (x) : (a)) : (b))
#define WRAP_ADD(x, y, a, b) x = (((x) + (y)) + \
((x) + (y) < (a) ? ((b) - (a)) : 0) + \
((x) + (y) > (b) ? ((a) - (b)) : 0))
-#define RANDRANGE(x, y) (((x) < (y)) ? ((x) + (rand() % (1 + (y) - (x)))) : (x))
+#define CHANCE(x) ((rand() % RAND_MAX) < ((x) * RAND_MAX))
+#define RANDRANGE(x, y) (((x) < (y)) ? ((x) + (rand() % (long)(1 + (y) - (x)))) : (x))
-// ALL
-#define NONE 0
// Compile-time options
#ifndef VERSION
#define DATADIR "."
#endif
+#ifndef SCREEN_WIDTH
+#define SCREEN_WIDTH 800
+#endif
+
+#ifndef SCREEN_HEIGHT
+#define SCREEN_HEIGHT 600
+#endif
+
#ifndef PATH_MAX
-#define PATH_MAX 4096
+#define PATH_MAX 4096
#endif
+#define STARS_NUM 200
+
// Object Flags
#define FL_WEAPCO 1
#define FL_FRIEND 2
#define FL_DROPMINES 512
#define FL_AIMS 1024
#define FL_DISABLED 2048
-#define FL_CANNOTDIE 4096 // This will only apply to Kline before the final mission
+#define FL_CANNOTDIE 4096 // No longer used
#define FL_RUNSAWAY 8192
#define FL_ALWAYSFACE 16384 // Kline doesn't turn his back on you! ;)
#define FL_CIRCLES 32768L // Kline can circle around
#define FL_HASMINIMUMSPEED 2097152L
#define FL_FIRELASER 4194304L
-// Explosions
-#define E_SMALL_EXPLOSION 4
-#define E_BIG_EXPLOSION 8
-#define E_SMOKE 12
-#define E_TINY_EXPLOSION 16
-#define E_ELECTRICAL 20
-
// Weapon flags
#define WF_SPREAD 4
#define WF_SCATTER 8
#define WF_DISABLE 1024
#define WF_TIMEDEXPLOSION 2048
-#define MAX_WEAPONS 20
-#define MAX_SHAPES 100
-#define MAX_SHIPSHAPES 120
-#define MAX_TEXTSHAPES 150
-#define MAX_FONTSHAPES 6
-#define MAX_SHOPSHAPES 6
#define MAX_CARGO 20
-
-#define SHIP_HIT_INDEX 60
+#define MAX_INFOLINES 3
+#define MAX_EVENTS 20
+
+
+enum keys {
+ KEY_UP,
+ KEY_DOWN,
+ KEY_LEFT,
+ KEY_RIGHT,
+ KEY_FIRE,
+ KEY_ALTFIRE,
+ KEY_SWITCH,
+ KEY_PAUSE,
+ KEY_ESCAPE,
+ KEY_FULLSCREEN,
+ KEY_DUMMY,
+ KEY_LAST
+};
// AI Types
enum {
-
AI_NORMAL = 1,
AI_DEFENSIVE,
AI_OFFENSIVE,
// These are for Alien *indexes* NOT classdefs!!
enum {
-
- ALIEN_BOSS_PART4 = 10,
- ALIEN_BOSS_PART3 = 11,
- ALIEN_BOSS_PART2 = 12,
- ALIEN_BOSS_PART1 = 13,
- ALIEN_BOSS = 14,
+ ALIEN_NORMAL_LAST = 20,
+ ALIEN_BOSS,
+ ALIEN_BOSS_PART1,
+ ALIEN_BOSS_PART2,
+ ALIEN_BOSS_PART3,
+ ALIEN_BOSS_PART4,
+ ALIEN_BOSS_PART5,
+ ALIEN_BOSS_PART6,
ALIEN_KLINE,
ALIEN_PHOEBE,
ALIEN_URSULA,
ALIEN_SID,
- ALIEN_GOODTRANSPORT = 19,
- ALIEN_MAX = 25
+ ALIEN_FRIEND1,
+ ALIEN_FRIEND2,
+ ALIEN_MAX
};
// Droppables
enum {
-
P_ANYTHING = 1,
P_WEAPONS,
P_CASH,
// Jobs
enum {
-
WT_PLASMA = 1,
WT_ROCKET,
WT_ENERGYRAY,
// Weapons
enum {
-
W_NONE = -1,
W_PLAYER_WEAPON,
W_PLAYER_WEAPON2,
W_AIMED_SHOT,
W_SPREADSHOT,
W_IONCANNON,
- W_DIRSHOCKMISSILE
+ W_DIRSHOCKMISSILE,
+ W_MAX
};
// Mission types
enum {
-
- M_DESTROY_ALL_TARGETS = 1,
+ M_NONE,
+ M_DESTROY_ALL_TARGETS,
M_DESTROY_TARGET_TYPE,
M_COLLECT,
M_PROTECT_PICKUP,
};
enum {
-
OB_JUST_FAILED = -2,
OB_FAILED,
OB_INCOMPLETE,
// Class Defs - Some of these are just place holders
enum {
-
CD_DUALFIGHTER, // 0
CD_MISSILEBOAT,
CD_PROTOFIGHTER,
CD_URSULA
};
-// Text shapes
+// Sprites
+enum {
+ // Intermission
+ SP_CURSOR,
+ SP_START_MISSION,
+ SP_MAP,
+ SP_STATUS,
+ SP_SAVE,
+ SP_SHOP,
+ SP_COMM,
+ SP_OPTIONS,
+ SP_EXIT,
+ SP_PLASMA_MAX_OUTPUT,
+ SP_PLASMA_MAX_POWER,
+ SP_PLASMA_MAX_RATE,
+ SP_PLASMA_AMMO,
+ SP_ROCKET_AMMO,
+ SP_PLASMA_MIN_OUTPUT,
+ SP_PLASMA_MIN_POWER,
+ SP_PLASMA_MIN_RATE,
+ SP_PLASMA_MAX_AMMO,
+ SP_ROCKET_MAX_AMMO,
+ SP_DOUBLE_ROCKETS,
+ SP_MICRO_ROCKETS,
+ SP_LASER,
+ SP_HOMING_MISSILE,
+ SP_CHARGER,
+ SP_DOUBLE_HOMING_MISSILES,
+ SP_MICRO_HOMING_MISSILES,
+ SP_GOTO,
+ SP_BUY,
+ SP_SELL,
+ SP_FIREFLY,
+ SP_SUN,
+ SP_PLANET_GREEN,
+ SP_PLANET_BLUE,
+ SP_PLANET_RED,
+ SP_PLANET_ORANGE,
+
+ // Bullets
+ SP_PLASMA_GREEN,
+ SP_PLASMA_RED,
+ SP_DIR_PLASMA_GREEN,
+ SP_DIR_PLASMA_RED,
+ SP_ION,
+ SP_ROCKET,
+ SP_ROCKET_L,
+
+ // Explosions
+ SP_SMALL_EXPLOSION,
+ SP_SMALL_EXPLOSION_2,
+ SP_SMALL_EXPLOSION_3,
+ SP_SMALL_EXPLOSION_L,
+ SP_BIG_EXPLOSION,
+ SP_BIG_EXPLOSION_2,
+ SP_BIG_EXPLOSION_3,
+ SP_BIG_EXPLOSION_L,
+ SP_SMOKE,
+ SP_SMOKE_2,
+ SP_SMOKE_3,
+ SP_SMOKE_L,
+ SP_TINY_EXPLOSION,
+ SP_TINY_EXPLOSION_2,
+ SP_TINY_EXPLOSION_3,
+ SP_TINY_EXPLOSION_L,
+ SP_ELECTRICAL,
+ SP_ELECTRICAL_2,
+ SP_ELECTRICAL_3,
+ SP_ELECTRICAL_L,
+
+ // Pickups
+ SP_PICKUP_MONEY,
+ SP_PICKUP_PLASMA,
+ SP_PICKUP_ROCKETS,
+ SP_PICKUP_SHIELD,
+ SP_PICKUP_PLASMA_OUTPUT,
+ SP_PICKUP_PLASMA_POWER,
+ SP_PICKUP_PLASMA_RATE,
+ SP_SUPERCHARGE,
+ SP_CARGO,
+ SP_ESCAPE_POD,
+ SP_ORE,
+ SP_ORE_2,
+ SP_ORE_L,
+ SP_CHAIN_LINK,
+ SP_MINE,
+
+ // Targeting system
+ SP_ARROW_NORTH,
+ SP_ARROW_NORTHEAST,
+ SP_ARROW_EAST,
+ SP_ARROW_SOUTHEAST,
+ SP_ARROW_SOUTH,
+ SP_ARROW_SOUTHWEST,
+ SP_ARROW_WEST,
+ SP_ARROW_NORTHWEST,
+ SP_ARROW_FRIEND_NORTH,
+ SP_ARROW_FRIEND_NORTHEAST,
+ SP_ARROW_FRIEND_EAST,
+ SP_ARROW_FRIEND_SOUTHEAST,
+ SP_ARROW_FRIEND_SOUTH,
+ SP_ARROW_FRIEND_SOUTHWEST,
+ SP_ARROW_FRIEND_WEST,
+ SP_ARROW_FRIEND_NORTHWEST,
+ SP_INDICATOR_TARGET,
+ SP_INDICATOR_SID,
+ SP_INDICATOR_PHOEBE,
+ SP_INDICATOR_URSULA,
+ SP_INDICATOR_KLINE,
+
+ SP_MAX
+};
+
+// Face sprites
+enum {
+ FS_CHRIS,
+ FS_SID,
+ FS_KRASS,
+ FS_KLINE,
+ FS_PHOEBE,
+ FS_URSULA,
+ FS_CREW,
+ FS_MAX
+};
+
+// Ship sprites
+enum {
+ SS_FIREFLY,
+ SS_FIREFLY_L,
+ SS_SID,
+ SS_SID_L,
+ SS_FRIEND,
+ SS_FRIEND_L,
+ SS_GOODTRANSPORT,
+ SS_GOODTRANSPORT_L,
+ SS_REBELCARRIER,
+ SS_REBELCARRIER_L,
+ SS_DUALFIGHTER,
+ SS_DUALFIGHTER_L,
+ SS_MISSILEBOAT,
+ SS_MISSILEBOAT_L,
+ SS_PROTOFIGHTER,
+ SS_PROTOFIGHTER_L,
+ SS_AIMFIGHTER,
+ SS_AIMFIGHTER_L,
+ SS_DRONE,
+ SS_DRONE_L,
+ SS_MINER,
+ SS_MINER_L,
+ SS_ESCORT,
+ SS_ESCORT_L,
+ SS_MOBILE_RAY,
+ SS_MOBILE_RAY_L,
+ SS_TRANSPORTSHIP,
+ SS_TRANSPORTSHIP_L,
+ SS_CARGOSHIP,
+ SS_CARGOSHIP_L,
+ SS_SLAVETRANSPORT,
+ SS_SLAVETRANSPORT_L,
+ SS_BARRIER,
+ SS_MOBILESHIELD,
+ SS_MOBILESHIELD_L,
+ SS_ASTEROID,
+ SS_ASTEROID_SMALL,
+ SS_ASTEROID_SMALL_L,
+ SS_CLOAKFIGHTER,
+ SS_CLOAKFIGHTER_L,
+ SS_EVILURSULA,
+ SS_EVILURSULA_L,
+ SS_KRASS,
+ SS_KRASS_L,
+ SS_FRIGATE,
+ SS_FRIGATE_L,
+ SS_FRIGATE_WING1,
+ SS_FRIGATE_WING1_L,
+ SS_FRIGATE_WING2,
+ SS_FRIGATE_WING2_L,
+ SS_MINERBOSS,
+ SS_MINERBOSS_L,
+ SS_MINERBOSS_WING1,
+ SS_MINERBOSS_WING1_L,
+ SS_MINERBOSS_WING2,
+ SS_MINERBOSS_WING2_L,
+ SS_MINERBOSS_WING3,
+ SS_MINERBOSS_WING3_L,
+ SS_MINERBOSS_WING4,
+ SS_MINERBOSS_WING4_L,
+ SS_EXEC,
+ SS_EXEC_L,
+ SS_PLUTOBOSS,
+ SS_PLUTOBOSS_L,
+ SS_URANUSBOSS,
+ SS_URANUSBOSS_L,
+ SS_URANUSBOSS_WING1,
+ SS_URANUSBOSS_WING1_L,
+ SS_URANUSBOSS_WING2,
+ SS_URANUSBOSS_WING2_L,
+ SS_KLINE,
+ SS_KLINE_L,
+ SS_HIT_INDEX,
+ SS_MAX = SS_HIT_INDEX * 2
+};
+
+// Shop sprites
enum {
+ SHOP_S_PRIMARY,
+ SHOP_S_POWERUP,
+ SHOP_S_SECONDARY,
+ SHOP_S_CATALOG,
+ SHOP_S_SHIP_INFO,
+ SHOP_S_ITEM_INFO,
+ SHOP_S_MAX
+};
- TS_PRESENTS,
+// Text sprites
+enum {
+ // Main menu
+ TS_PRESENTS = MAX_INFOLINES,
TS_AN_SDL_GAME,
TS_START_NEW_GAME,
TS_LOAD_GAME,
TS_UNLIMITED_CASH,
TS_UNLIMITED_TIME,
TS_START_GAME,
- TS_DIFFICULTY
+ TS_DIFFICULTY,
+
+ // Intermission
+ TS_CURRENT_SYSTEM,
+ TS_INFO_START_MISSION,
+ TS_INFO_GOTO,
+ TS_INFO_MAP,
+ TS_INFO_STATUS,
+ TS_INFO_SAVE_GAME,
+ TS_INFO_SHOP,
+ TS_INFO_COMMS,
+ TS_INFO_OPTIONS,
+ TS_INFO_EXIT,
+ TS_CURRENT_PLANET,
+ TS_DEST_PLANET,
+
+ // Status
+ TS_STATUS_HEADER,
+ TS_SHOTS_FIRED,
+ TS_HITS_SCORED,
+ TS_ACCURACY,
+ TS_OTHER_KILLS,
+ TS_CASH_EARNED,
+ TS_CHRIS_HEADER,
+ TS_CHRIS_KILLS,
+ TS_CHRIS_SHIELD_PICKUPS,
+ TS_CHRIS_PLASMA_PICKUPS,
+ TS_CHRIS_ROCKET_PICKUPS,
+ TS_CHRIS_POWERUP_PICKUPS,
+ TS_CHRIS_MINES_KILLED,
+ TS_CHRIS_SLAVES_RESCUED,
+ TS_PHOEBE_HEADER,
+ TS_PHOEBE_KILLS,
+ TS_PHOEBE_DEATHS,
+ TS_URSULA_HEADER,
+ TS_URSULA_KILLS,
+ TS_URSULA_DEATHS,
+ TS_STATUS_FOOTER,
+
+ // Mission
+ TS_RADIO,
+ TS_SHIELD,
+ TS_PLASMA_T,
+ TS_AMMO_T,
+ TS_TARGET,
+ TS_TARGET_SID,
+ TS_TARGET_PHOEBE,
+ TS_TARGET_KLINE,
+ TS_CASH_T,
+ TS_OBJECTIVES_T,
+ TS_TIME_T,
+ TS_POWER,
+ TS_OUTPUT,
+ TS_COOLER,
+ TS_PAUSED,
+ TS_TIME,
+ TS_PLASMA,
+ TS_AMMO,
+ TS_CASH,
+ TS_OBJECTIVES,
+
+ TS_MAX
};
// Menu types
enum {
-
MENU_MAIN,
MENU_DIFFICULTY,
MENU_LOAD,
// Shop items
enum {
-
SHOP_PLASMA_MAX_OUTPUT,
SHOP_PLASMA_MAX_DAMAGE,
SHOP_PLASMA_MAX_RATE,
SHOP_CHARGER,
SHOP_DOUBLE_HOMING_MISSILES,
SHOP_MICRO_HOMING_MISSILES,
- MAX_SHOPITEMS
+ SHOP_MAX
};
// Font Colors
enum {
-
FONT_WHITE,
FONT_RED,
FONT_YELLOW,
FONT_GREEN,
FONT_CYAN,
- FONT_OUTLINE // a dark blue color
+ FONT_OUTLINE, // a dark blue color
+ FONT_MAX
};
// Sounds
enum {
-
SFX_EXPLOSION,
SFX_HIT,
SFX_DEATH,
// Sections
enum {
-
SECTION_TITLE,
SECTION_INTERMISSION,
SECTION_GAME
};
-// Faces
+// Systems
enum {
+ SYSTEM_SPIRIT,
+ SYSTEM_EYANANTH,
+ SYSTEM_MORDOR,
+ SYSTEM_SOL
+};
- FACE_CHRIS = 90,
- FACE_SID,
- FACE_KRASS,
- FACE_KLINE,
- FACE_PHOEBE,
- FACE_URSULA,
- FACE_CREW
+// Planets (Spirit)
+enum {
+ PLANET_HAIL,
+ PLANET_CERADSE,
+ PLANET_HINSTAG,
+ PLANET_JOLDAR,
+ PLANET_MOEBO
};
-// Missions
+// Planets (Eyananth)
+enum {
+ PLANET_NEROD,
+ PLANET_ALLEZ,
+ PLANET_URUSOR,
+ PLANET_DORIM,
+ PLANET_ELAMALE,
+ PLANET_RESCUESLAVES = 9 // For save compatibility
+};
+
+// Planets (Mordor)
enum {
+ PLANET_ODEON,
+ PLANET_FELLON,
+ PLANET_SIVEDI,
+ PLANET_ALMARTHA,
+ PLANET_POSWIC,
+ PLANET_ELLESH,
+ PLANET_CLOAKFIGHTER = 9 // For save compatibility
+};
+// Planets (Sol)
+enum {
+ PLANET_MERCURY,
+ PLANET_VENUS,
+ PLANET_EARTH,
+ PLANET_MARS,
+ PLANET_JUPITER,
+ PLANET_SATURN,
+ PLANET_URANUS,
+ PLANET_NEPTUNE,
+ PLANET_PLUTO
+};
+
+// Missions
+enum {
MISN_START,
MISN_HAIL,
MISN_CERADSE,
};
const int rate2reload[6] = {15, 15, 13, 11, 9, 7};
-const int screenWidth = 800;
-const int screenHeight = 600;
+const int screenWidth = SCREEN_WIDTH;
+const int screenHeight = SCREEN_HEIGHT;
const int xViewBorder = 100;
const int yViewBorder = 100;
const float cameraMaxSpeed = 3.;