Move */main/weapon.h -> common/main/weapon.h
This commit is contained in:
parent
012d8e249b
commit
6c9c87e27c
|
@ -25,11 +25,53 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
|||
#include "game.h"
|
||||
#include "piggy.h"
|
||||
|
||||
// weapon info flags
|
||||
#define WIF_PLACABLE 1 // can be placed by level designer
|
||||
|
||||
#if defined(DXX_BUILD_DESCENT_I) || defined(DXX_BUILD_DESCENT_II)
|
||||
typedef struct weapon_info {
|
||||
sbyte render_type; // How to draw 0=laser, 1=blob, 2=object
|
||||
#if defined(DXX_BUILD_DESCENT_I)
|
||||
sbyte model_num; // Model num if rendertype==2.
|
||||
sbyte model_num_inner; // Model num of inner part if rendertype==2.
|
||||
sbyte persistent; // 0 = dies when it hits something, 1 = continues (eg, fusion cannon)
|
||||
|
||||
sbyte flash_vclip; // What vclip to use for muzzle flash
|
||||
short flash_sound; // What sound to play when fired
|
||||
sbyte robot_hit_vclip; // What vclip for impact with robot
|
||||
short robot_hit_sound; // What sound for impact with robot
|
||||
|
||||
sbyte wall_hit_vclip; // What vclip for impact with wall
|
||||
short wall_hit_sound; // What sound for impact with wall
|
||||
sbyte fire_count; // Number of bursts fired from EACH GUN per firing. For weapons which fire from both sides, 3*fire_count shots will be fired.
|
||||
sbyte ammo_usage; // How many units of ammunition it uses.
|
||||
|
||||
sbyte weapon_vclip; // Vclip to render for the weapon, itself.
|
||||
sbyte destroyable; // If !0, this weapon can be destroyed by another weapon.
|
||||
sbyte matter; // Flag: set if this object is matter (as opposed to energy)
|
||||
sbyte bounce; // Flag: set if this object bounces off walls
|
||||
|
||||
sbyte homing_flag; // Set if this weapon can home in on a target.
|
||||
sbyte dum1, dum2, dum3;
|
||||
|
||||
fix energy_usage; // How much fuel is consumed to fire this weapon.
|
||||
fix fire_wait; // Time until this weapon can be fired again.
|
||||
|
||||
bitmap_index bitmap; // Pointer to bitmap if rendertype==0 or 1.
|
||||
|
||||
fix blob_size; // Size of blob if blob type
|
||||
fix flash_size; // How big to draw the flash
|
||||
fix impact_size; // How big of an impact
|
||||
fix strength[NDL]; // How much damage it can inflict
|
||||
fix speed[NDL]; // How fast it can move, difficulty level based.
|
||||
fix mass; // How much mass it has
|
||||
fix drag; // How much drag it has
|
||||
fix thrust; // How much thrust it has
|
||||
fix po_len_to_width_ratio; // For polyobjects, the ratio of len/width. (10 maybe?)
|
||||
fix light; // Amount of light this weapon casts.
|
||||
fix lifetime; // Lifetime in seconds of this weapon.
|
||||
fix damage_radius; // Radius of damage caused by weapon, used for missiles (not lasers) to apply to damage to things it did not hit
|
||||
//-- unused-- fix damage_force; // Force of damage caused by weapon, used for missiles (not lasers) to apply to damage to things it did not hit
|
||||
// damage_force was a real mess. Wasn't Difficulty_level based, and was being applied instead of weapon's actual strength. Now use 2*strength instead. --MK, 01/19/95
|
||||
bitmap_index picture; // a picture of the weapon for the cockpit
|
||||
#elif defined(DXX_BUILD_DESCENT_II)
|
||||
sbyte persistent; // 0 = dies when it hits something, 1 = continues (eg, fusion cannon)
|
||||
short model_num; // Model num if rendertype==2.
|
||||
short model_num_inner; // Model num of inner part if rendertype==2.
|
||||
|
@ -86,7 +128,9 @@ typedef struct weapon_info {
|
|||
bitmap_index picture; // a picture of the weapon for the cockpit
|
||||
/* not present in shareware datafiles */
|
||||
bitmap_index hires_picture; // a hires picture of the above
|
||||
#endif
|
||||
} __pack__ weapon_info;
|
||||
#endif
|
||||
|
||||
#define REARM_TIME (F1_0)
|
||||
|
||||
|
@ -97,16 +141,26 @@ typedef struct weapon_info {
|
|||
#define WEAPON_TYPE_CANNON_BALL 2
|
||||
#define WEAPON_TYPE_MISSILE 3
|
||||
|
||||
#define MAX_WEAPON_TYPES 70
|
||||
|
||||
#define WEAPON_RENDER_NONE -1
|
||||
#define WEAPON_RENDER_LASER 0
|
||||
#define WEAPON_RENDER_BLOB 1
|
||||
#define WEAPON_RENDER_POLYMODEL 2
|
||||
#define WEAPON_RENDER_VCLIP 3
|
||||
|
||||
#if defined(DXX_BUILD_DESCENT_I)
|
||||
#define MAX_WEAPON_TYPES 30
|
||||
|
||||
#define MAX_PRIMARY_WEAPONS 5
|
||||
#define MAX_SECONDARY_WEAPONS 5
|
||||
|
||||
#elif defined(DXX_BUILD_DESCENT_II)
|
||||
// weapon info flags
|
||||
#define WIF_PLACABLE 1 // can be placed by level designer
|
||||
#define MAX_WEAPON_TYPES 70
|
||||
|
||||
#define MAX_PRIMARY_WEAPONS 10
|
||||
#define MAX_SECONDARY_WEAPONS 10
|
||||
#endif
|
||||
|
||||
//given a weapon index, return the flag value
|
||||
#define HAS_FLAG(index) (1<<(index))
|
||||
|
@ -119,8 +173,6 @@ typedef struct weapon_info {
|
|||
#define HAS_FUSION_FLAG HAS_FLAG(FUSION_INDEX)
|
||||
|
||||
#define HAS_CONCUSSION_FLAG HAS_FLAG(CONCUSSION_INDEX)
|
||||
#define HAS_HOMING_FLAG HAS_FLAG(HOMING_INDEX)
|
||||
#define HAS_PROXIMITY_FLAG HAS_FLAG(PROXIMITY_INDEX)
|
||||
#define HAS_SMART_FLAG HAS_FLAG(SMART_INDEX)
|
||||
#define HAS_MEGA_FLAG HAS_FLAG(MEGA_INDEX)
|
||||
|
||||
|
@ -132,17 +184,24 @@ typedef struct weapon_info {
|
|||
#define SPREADFIRE_INDEX 2
|
||||
#define PLASMA_INDEX 3
|
||||
#define FUSION_INDEX 4
|
||||
#if defined(DXX_BUILD_DESCENT_II)
|
||||
#define SUPER_LASER_INDEX 5
|
||||
#define GAUSS_INDEX 6
|
||||
#define HELIX_INDEX 7
|
||||
#define PHOENIX_INDEX 8
|
||||
#define OMEGA_INDEX 9
|
||||
#endif
|
||||
|
||||
#define CONCUSSION_INDEX 0
|
||||
#define HOMING_INDEX 1
|
||||
#define PROXIMITY_INDEX 2
|
||||
#define SMART_INDEX 3
|
||||
#define MEGA_INDEX 4
|
||||
#if defined(DXX_BUILD_DESCENT_I)
|
||||
#define NUM_SHAREWARE_WEAPONS 3 //in shareware, old get first 3 of each
|
||||
|
||||
#define VULCAN_AMMO_SCALE (0x198300/2) //multiply ammo by this before displaying
|
||||
#elif defined(DXX_BUILD_DESCENT_II)
|
||||
#define SMISSILE1_INDEX 5
|
||||
#define GUIDED_INDEX 6
|
||||
#define SMART_MINE_INDEX 7
|
||||
|
@ -154,40 +213,41 @@ typedef struct weapon_info {
|
|||
#define VULCAN_AMMO_SCALE 0xcc163 //(0x198300/2) //multiply ammo by this before displaying
|
||||
|
||||
#define NUM_SMART_CHILDREN 6 // Number of smart children created by default.
|
||||
#endif
|
||||
|
||||
extern weapon_info Weapon_info[];
|
||||
extern int N_weapon_types;
|
||||
extern void do_weapon_select(int weapon_num, int secondary_flag);
|
||||
extern void show_weapon_status(void);
|
||||
|
||||
extern sbyte Primary_weapon, Secondary_weapon;
|
||||
|
||||
extern const ubyte Primary_weapon_to_weapon_info[MAX_PRIMARY_WEAPONS];
|
||||
extern const ubyte Secondary_weapon_to_weapon_info[MAX_SECONDARY_WEAPONS];
|
||||
|
||||
//for each Secondary weapon, which gun it fires out of
|
||||
extern const ubyte Secondary_weapon_to_gun_num[MAX_SECONDARY_WEAPONS];
|
||||
|
||||
//for each primary weapon, what kind of powerup gives weapon
|
||||
extern const ubyte Primary_weapon_to_powerup[MAX_SECONDARY_WEAPONS];
|
||||
|
||||
//for each Secondary weapon, what kind of powerup gives weapon
|
||||
extern const ubyte Secondary_weapon_to_powerup[MAX_SECONDARY_WEAPONS];
|
||||
|
||||
extern void auto_select_weapon(int weapon_type); //parm is primary or secondary
|
||||
extern void select_weapon(int weapon_num, int secondary_flag, int print_message,int wait_for_rearm);
|
||||
|
||||
#if defined(DXX_BUILD_DESCENT_II)
|
||||
//for each Secondary weapon, which gun it fires out of
|
||||
extern const ubyte Secondary_weapon_to_gun_num[MAX_SECONDARY_WEAPONS];
|
||||
|
||||
//flags whether the last time we use this weapon, it was the 'super' version
|
||||
extern ubyte Primary_last_was_super[MAX_PRIMARY_WEAPONS];
|
||||
extern ubyte Secondary_last_was_super[MAX_SECONDARY_WEAPONS];
|
||||
|
||||
extern void auto_select_weapon(int weapon_type); //parm is primary or secondary
|
||||
extern void select_weapon(int weapon_num, int secondary_flag, int print_message,int wait_for_rearm);
|
||||
|
||||
extern const char *const Primary_weapon_names_short[];
|
||||
extern const char *const Secondary_weapon_names_short[];
|
||||
extern const char *const Primary_weapon_names[];
|
||||
extern const char *const Secondary_weapon_names[];
|
||||
extern const sbyte Weapon_is_energy[MAX_WEAPON_TYPES];
|
||||
#endif
|
||||
extern const int Primary_ammo_max[MAX_PRIMARY_WEAPONS];
|
||||
extern const ubyte Secondary_ammo_max[MAX_SECONDARY_WEAPONS];
|
||||
extern const sbyte Weapon_is_energy[MAX_WEAPON_TYPES];
|
||||
|
||||
#define HAS_WEAPON_FLAG 1
|
||||
#define HAS_ENERGY_FLAG 2
|
||||
|
@ -214,6 +274,7 @@ int pick_up_primary(int weapon_index);
|
|||
//called when ammo (for the vulcan cannon) is picked up
|
||||
int pick_up_ammo(int class_flag,int weapon_index,int ammo_count);
|
||||
|
||||
#if defined(DXX_BUILD_DESCENT_II)
|
||||
extern int attempt_to_steal_item(struct object *objp, int player_num);
|
||||
|
||||
//this function is for when the player intentionally drops a powerup
|
||||
|
@ -224,6 +285,7 @@ extern int spit_powerup(struct object *spitter, int id, int seed);
|
|||
extern void rock_the_mine_frame(void);
|
||||
extern void smega_rock_stuff(void);
|
||||
extern void init_smega_detonates(void);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* reads n weapon_info structs from a PHYSFS_file
|
||||
|
@ -231,6 +293,13 @@ extern void init_smega_detonates(void);
|
|||
extern int weapon_info_read_n(weapon_info *wi, int n, PHYSFS_file *fp, int file_version);
|
||||
|
||||
//return which bomb will be dropped next time the bomb key is pressed
|
||||
#if defined(DXX_BUILD_DESCENT_I)
|
||||
static inline int which_bomb(void)
|
||||
{
|
||||
return PROXIMITY_INDEX;
|
||||
}
|
||||
#elif defined(DXX_BUILD_DESCENT_II)
|
||||
int which_bomb(void);
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -1,182 +0,0 @@
|
|||
/*
|
||||
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
|
||||
SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
|
||||
END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
|
||||
ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
|
||||
IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
|
||||
SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
|
||||
FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
|
||||
CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
|
||||
AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
|
||||
COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
||||
*/
|
||||
|
||||
/*
|
||||
*
|
||||
* Protypes for weapon stuff.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _WEAPON_H
|
||||
#define _WEAPON_H
|
||||
|
||||
#include "inferno.h"
|
||||
#include "gr.h"
|
||||
#include "game.h"
|
||||
#include "piggy.h"
|
||||
|
||||
typedef struct weapon_info {
|
||||
sbyte render_type; // How to draw 0=laser, 1=blob, 2=object
|
||||
sbyte model_num; // Model num if rendertype==2.
|
||||
sbyte model_num_inner; // Model num of inner part if rendertype==2.
|
||||
sbyte persistent; // 0 = dies when it hits something, 1 = continues (eg, fusion cannon)
|
||||
|
||||
sbyte flash_vclip; // What vclip to use for muzzle flash
|
||||
short flash_sound; // What sound to play when fired
|
||||
sbyte robot_hit_vclip; // What vclip for impact with robot
|
||||
short robot_hit_sound; // What sound for impact with robot
|
||||
|
||||
sbyte wall_hit_vclip; // What vclip for impact with wall
|
||||
short wall_hit_sound; // What sound for impact with wall
|
||||
sbyte fire_count; // Number of bursts fired from EACH GUN per firing. For weapons which fire from both sides, 3*fire_count shots will be fired.
|
||||
sbyte ammo_usage; // How many units of ammunition it uses.
|
||||
|
||||
sbyte weapon_vclip; // Vclip to render for the weapon, itself.
|
||||
sbyte destroyable; // If !0, this weapon can be destroyed by another weapon.
|
||||
sbyte matter; // Flag: set if this object is matter (as opposed to energy)
|
||||
sbyte bounce; // Flag: set if this object bounces off walls
|
||||
|
||||
sbyte homing_flag; // Set if this weapon can home in on a target.
|
||||
sbyte dum1, dum2, dum3;
|
||||
|
||||
fix energy_usage; // How much fuel is consumed to fire this weapon.
|
||||
fix fire_wait; // Time until this weapon can be fired again.
|
||||
|
||||
bitmap_index bitmap; // Pointer to bitmap if rendertype==0 or 1.
|
||||
|
||||
fix blob_size; // Size of blob if blob type
|
||||
fix flash_size; // How big to draw the flash
|
||||
fix impact_size; // How big of an impact
|
||||
fix strength[NDL]; // How much damage it can inflict
|
||||
fix speed[NDL]; // How fast it can move, difficulty level based.
|
||||
fix mass; // How much mass it has
|
||||
fix drag; // How much drag it has
|
||||
fix thrust; // How much thrust it has
|
||||
fix po_len_to_width_ratio; // For polyobjects, the ratio of len/width. (10 maybe?)
|
||||
fix light; // Amount of light this weapon casts.
|
||||
fix lifetime; // Lifetime in seconds of this weapon.
|
||||
fix damage_radius; // Radius of damage caused by weapon, used for missiles (not lasers) to apply to damage to things it did not hit
|
||||
//-- unused-- fix damage_force; // Force of damage caused by weapon, used for missiles (not lasers) to apply to damage to things it did not hit
|
||||
// damage_force was a real mess. Wasn't Difficulty_level based, and was being applied instead of weapon's actual strength. Now use 2*strength instead. --MK, 01/19/95
|
||||
bitmap_index picture; // a picture of the weapon for the cockpit
|
||||
} __pack__ weapon_info;
|
||||
|
||||
#define REARM_TIME (F1_0)
|
||||
|
||||
#define WEAPON_DEFAULT_LIFETIME (F1_0*12) // Lifetime of an object if a bozo forgets to define it.
|
||||
|
||||
#define WEAPON_TYPE_WEAK_LASER 0
|
||||
#define WEAPON_TYPE_STRONG_LASER 1
|
||||
#define WEAPON_TYPE_CANNON_BALL 2
|
||||
#define WEAPON_TYPE_MISSILE 3
|
||||
#define MAX_WEAPON_TYPES 30
|
||||
|
||||
#define WEAPON_RENDER_NONE -1
|
||||
#define WEAPON_RENDER_LASER 0
|
||||
#define WEAPON_RENDER_BLOB 1
|
||||
#define WEAPON_RENDER_POLYMODEL 2
|
||||
#define WEAPON_RENDER_VCLIP 3
|
||||
|
||||
#define MAX_PRIMARY_WEAPONS 5
|
||||
#define MAX_SECONDARY_WEAPONS 5
|
||||
|
||||
//given a weapon index, return the flag value
|
||||
#define HAS_FLAG(index) (1<<(index))
|
||||
|
||||
// Weapon flags, if player->weapon_flags & WEAPON_FLAG is set, then the player has this weapon
|
||||
#define HAS_LASER_FLAG HAS_FLAG(LASER_INDEX)
|
||||
#define HAS_VULCAN_FLAG HAS_FLAG(VULCAN_INDEX)
|
||||
#define HAS_SPREADFIRE_FLAG HAS_FLAG(SPREADFIRE_INDEX)
|
||||
#define HAS_PLASMA_FLAG HAS_FLAG(PLASMA_INDEX)
|
||||
#define HAS_FUSION_FLAG HAS_FLAG(FUSION_INDEX)
|
||||
|
||||
#define HAS_CONCUSSION_FLAG HAS_FLAG(CONCUSSION_INDEX)
|
||||
#define HAS_SMART_FLAG HAS_FLAG(SMART_INDEX)
|
||||
#define HAS_MEGA_FLAG HAS_FLAG(MEGA_INDEX)
|
||||
|
||||
#define CLASS_PRIMARY 0
|
||||
#define CLASS_SECONDARY 1
|
||||
|
||||
#define LASER_INDEX 0
|
||||
#define VULCAN_INDEX 1
|
||||
#define SPREADFIRE_INDEX 2
|
||||
#define PLASMA_INDEX 3
|
||||
#define FUSION_INDEX 4
|
||||
|
||||
#define CONCUSSION_INDEX 0
|
||||
#define HOMING_INDEX 1
|
||||
#define PROXIMITY_INDEX 2
|
||||
#define SMART_INDEX 3
|
||||
#define MEGA_INDEX 4
|
||||
|
||||
#define NUM_SHAREWARE_WEAPONS 3 //in shareware, old get first 3 of each
|
||||
|
||||
#define VULCAN_AMMO_SCALE (0x198300/2) //multiply ammo by this before displaying
|
||||
|
||||
extern weapon_info Weapon_info[];
|
||||
extern int N_weapon_types;
|
||||
extern void do_weapon_select(int weapon_num, int secondary_flag);
|
||||
|
||||
extern sbyte Primary_weapon, Secondary_weapon;
|
||||
|
||||
extern const ubyte Primary_weapon_to_weapon_info[MAX_PRIMARY_WEAPONS];
|
||||
extern const ubyte Secondary_weapon_to_weapon_info[MAX_SECONDARY_WEAPONS];
|
||||
//for each primary weapon, what kind of powerup gives weapon
|
||||
extern const ubyte Primary_weapon_to_powerup[MAX_SECONDARY_WEAPONS];
|
||||
//for each Secondary weapon, what kind of powerup gives weapon
|
||||
extern const ubyte Secondary_weapon_to_powerup[MAX_SECONDARY_WEAPONS];
|
||||
extern void auto_select_weapon(int weapon_type); //parm is primary or secondary
|
||||
extern void select_weapon(int weapon_num, int secondary_flag, int print_message,int wait_for_rearm);
|
||||
|
||||
extern const int Primary_ammo_max[MAX_PRIMARY_WEAPONS];
|
||||
extern const ubyte Secondary_ammo_max[MAX_PRIMARY_WEAPONS];
|
||||
|
||||
#define HAS_WEAPON_FLAG 1
|
||||
#define HAS_ENERGY_FLAG 2
|
||||
#define HAS_AMMO_FLAG 4
|
||||
#define HAS_ALL (HAS_WEAPON_FLAG|HAS_ENERGY_FLAG|HAS_AMMO_FLAG)
|
||||
|
||||
// ------------------------------------------------------------------------------------
|
||||
// Return:
|
||||
// Bits set:
|
||||
// HAS_WEAPON_FLAG
|
||||
// HAS_ENERGY_FLAG
|
||||
// HAS_AMMO_FLAG
|
||||
extern int player_has_weapon(int weapon_num, int secondary_flag);
|
||||
|
||||
//called when one of these weapons is picked up
|
||||
//when you pick up a secondary, you always get the weapon & ammo for it
|
||||
int pick_up_secondary(int weapon_index,int count);
|
||||
|
||||
//called when a primary weapon is picked up
|
||||
//returns true if actually picked up
|
||||
int pick_up_primary(int weapon_index);
|
||||
|
||||
//called when ammo (for the vulcan cannon) is picked up
|
||||
int pick_up_ammo(int class_flag,int weapon_index,int ammo_count);
|
||||
|
||||
extern void maybe_select_primary(int weapon_index);
|
||||
extern void maybe_select_secondary(int weapon_index);
|
||||
|
||||
/*
|
||||
* reads n weapon_info structs from a PHYSFS_file
|
||||
*/
|
||||
extern int weapon_info_read_n(weapon_info *wi, int n, PHYSFS_file *fp, int file_version);
|
||||
|
||||
//return which bomb will be dropped next time the bomb key is pressed
|
||||
static inline int which_bomb(void)
|
||||
{
|
||||
return PROXIMITY_INDEX;
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in a new issue