sqwarmed/sdk_src/game/shared/swarm/asw_shareddefs.h

606 lines
16 KiB
C++

#ifndef ASW_SHAREDDEFS_H
#define ASW_SHAREDDEFS_H
#ifdef _WIN32
#pragma once
#endif
#include "const.h"
#define ASW_MAX_PLAYER_NAME_LENGTH 32
#define ASW_MAX_PLAYER_NAME_LENGTH_3D 20
enum ASW_Inventory_slot_t
{
ASW_INVENTORY_SLOT_PRIMARY = 0,
ASW_INVENTORY_SLOT_SECONDARY = 1,
ASW_INVENTORY_SLOT_EXTRA,
ASW_NUM_INVENTORY_SLOTS,
};
// Specifies whether a "Use" order utilizes an item, and if not, what kind of order it is
enum ASW_UseOrderTypes_t
{
ASW_USE_ORDER_WITH_ITEM, // requires an item be specified in the order message
ASW_USE_ORDER_HACK,
ASW_NUM_USE_ORDERS
};
#define ASW_MIN_TUMBLERS_FAST_HACK 5 // how many tumblers a computer hack must have to qualify for the fast medal and the tracking timer bar
#define ASW_MAX_ENTRIES_PER_TUMBLER 8
#define ASW_MIN_ENTRIES_PER_TUMBLER 4
bool MedalMatchesAchievement( int nMedalIndex, int nAchievementIndex );
int GetAchievementIndexForMedal( int nMedalIndex );
enum ASW_Skill_Slot
{
ASW_SKILL_SLOT_0 = 0,
ASW_SKILL_SLOT_1,
ASW_SKILL_SLOT_2,
ASW_SKILL_SLOT_3,
ASW_SKILL_SLOT_4,
ASW_SKILL_SLOT_SPARE,
ASW_NUM_SKILL_SLOTS
};
#define ASW_SKILL_POINTS_PER_MISSION 2
#define ENGINEERING_AURA_RADIUS 300
#define ASW_MAX_PLAYERS 6 // currently limiting the game to 6 players, more than that feels chaotic
#define ASW_MAX_READY_PLAYERS 8 // max number of slots for ready players in the game resource
#define ASW_MAX_MARINE_RESOURCES 5
#define ASW_MAX_OBJECTIVES 25
#define ASW_PLAYER_MAX_USE_ENTS 3
#define ASW_PLAYER_VIEW_OFFSET Vector( 0, 0, 53.5 )
#define ASW_MARINE_GUN_OFFSET_X 25.0f
#define ASW_MARINE_GUN_OFFSET_Y 4.0f
#define ASW_MARINE_GUN_OFFSET_Z 34.0f
// was: 55.0f
#define PUSHAWAY_THINK_INTERVAL (1.0f / 20.0f)
// Re-use the vehicle crosshair hidehud bit for our remote turrets
#define HIDEHUD_REMOTE_TURRET ( HIDEHUD_VEHICLE_CROSSHAIR ) // player is using a remote turret
// Re-use base damage bits
#define DMG_INFEST (DMG_AIRBOAT) // damage from parasite infestation
#define DMG_BLURPOISON (DMG_POISON) // damage from buzzers, blurs the player's view
#define DMG_GIB_CORPSE ( DMG_CRUSH | DMG_FALL | DMG_BLAST | DMG_SONIC | DMG_CLUB | DMG_INFEST )
#define ASW_MAX_MELEE_ATTACKS 64
#define ASW_MAX_PREDICTED_MELEE_EVENTS 16
#define MELEE_BUTTON IN_ALT1
enum ASW_Marine_Class
{
MARINE_CLASS_UNDEFINED = -1,
MARINE_CLASS_NCO = 0,
MARINE_CLASS_SPECIAL_WEAPONS,
MARINE_CLASS_MEDIC,
MARINE_CLASS_TECH,
NUM_MARINE_CLASSES
};
enum ASW_Melee_Movement_t
{
MELEE_MOVEMENT_ANIMATION_ONLY,
MELEE_MOVEMENT_FALLING_ONLY,
MELEE_MOVEMENT_FULL,
};
enum ASW_Jump_Jet_t
{
JJ_NONE = 0,
JJ_CHARGE = 1,
JJ_JUMP_JETS = 2,
JJ_BLINK = 3,
};
// hack options
enum
{
ASW_HACK_OPTION_ICON_0 = 0,
ASW_HACK_OPTION_ICON_1, // computers can display up to 6 customised icons
ASW_HACK_OPTION_ICON_2,
ASW_HACK_OPTION_ICON_3,
ASW_HACK_OPTION_ICON_4,
ASW_HACK_OPTION_ICON_5,
ASW_HACK_OPTION_ICON_6,
ASW_HACK_OPTION_OVERRIDE // special option to launch the override hacking puzzle
};
// how many slots are in the ammo bag
#define ASW_AMMO_BAG_SLOTS 7
// use icon priorities
#define ASW_USE_PRIORITY_PICKUP 5
#define ASW_USE_PRIORITY_USE_AREA 4
#define ASW_MARINE_USE_RADIUS 100.0f
#define ASW_MARINE_HEALPERTICK_MAX 4
#define ASW_MARINE_HEALTICK_RATE 0.33f
#define ASW_FLARE_AUTOAIM_DOT 0.4f
// movement uses this axis to decide where the marine should go from his forward/sidemove
#define ASW_MOVEMENT_AXIS QAngle(0,90,0)
#define ASW_SCANNER_MAX_BLIPS 32
#define ASW_MAX_EQUIP_SLOTS 3
#define ASW_MAX_MARINE_WEAPONS ASW_MAX_EQUIP_SLOTS // an ASW marine shouldn't have more than this many weapons in its m_hWeapons
// asw light indices
enum
{
//LIGHT_INDEX_TE_DYNAMIC = 0x10000000,
//LIGHT_INDEX_PLAYER_BRIGHT = 0x20000000,
//LIGHT_INDEX_MUZZLEFLASH = 0x40000000,
ASW_LIGHT_INDEX_FLASHLIGHT = 0x60000000,
ASW_LIGHT_INDEX_FIRES = 0x64000000,
};
#define SWARM_DRONE_MODEL "models/swarm/drone/Drone.mdl"
#define SWARM_NEW_DRONE_MODEL "models/aliens/drone/drone.mdl"
#define SWARM_HARVESTER_MODEL "models/swarm/harvester/Harvester.mdl"
#define SWARM_SHIELDBUG_MODEL "models/swarm/Shieldbug/Shieldbug.mdl"
#define SWARM_NEW_SHIELDBUG_MODEL "models/aliens/Shieldbug/Shieldbug.mdl"
#define SWARM_MORTARBUG_MODEL "models/aliens/mortar/mortar.mdl"
#define SWARM_NEW_HARVESTER_MODEL "models/aliens/harvester/harvester.mdl"
#define ASW_BLIP_SPEECH_INTERVAL 10.0f
// when time scale drops below this, the stim cam will appear
#define ASW_STIM_CAM_TIME 0.6f
// asw profiling
#define VPROF_BUDGETGROUP_ASW_CLIENT _T("Swarm Client")
// how many marine profiles there are (used by the campaign save system)
#define ASW_NUM_MARINE_PROFILES 8
// !!NOTE!! - these numbers are hardcoded into engine's Host_cmd.cpp too :(
#define ASW_MAX_PLAYERS_PER_SAVE 10
#define ASW_MAX_MISSIONS_PER_CAMPAIGN 32
#define ASW_CURRENT_SAVE_VERSION 1
// must follow from last HUD_ entry in shareddefs.h
#define ASW_HUD_PRINTTALKANDCONSOLE 5
enum ASW_Orders
{
ASW_ORDER_HOLD_POSITION,
ASW_ORDER_FOLLOW,
ASW_ORDER_MOVE_TO,
ASW_ORDER_USE_OFFHAND_ITEM,
};
// Map markers
#define ASW_NUM_MAP_MARKS 32
enum MapMarkType
{
MMT_BRACKETS,
MMT_CROSS
};
struct ObjectiveMapMark
{
MapMarkType type;
bool bComplete;
bool bEnabled;
int x, y, w, h;
};
// impulse commands used to send hack tumbler commands
#define ASW_IMPULSE_REVERSE_TUMBLER_1 150
#define ASW_IMPULSE_REVERSE_TUMBLER_2 151
#define ASW_IMPULSE_REVERSE_TUMBLER_3 152
#define ASW_IMPULSE_REVERSE_TUMBLER_4 153
#define ASW_IMPULSE_REVERSE_TUMBLER_5 154
#define ASW_IMPULSE_REVERSE_TUMBLER_6 155
#define ASW_IMPULSE_REVERSE_TUMBLER_7 156
#define ASW_IMPULSE_REVERSE_TUMBLER_8 157
// max number of tumblers in the computer hack
#define ASW_HACK_COMPUTER_MAX_TUMBLERS 8
// egg gib flags
#define EGG_FLAG_OPEN 0x0001
#define EGG_FLAG_HATCH 0x0002
#define EGG_FLAG_DIE 0x0004
#define EGG_FLAG_GRUBSACK_DIE 0x0008
// door healths and break fractions
#define ASW_DOOR_REINFORCED_HEALTH 2400
#define ASW_DOOR_NORMAL_HEALTH 1800
#define ASW_DOOR_PARTIAL_DENT_HEALTH 0.66f
#define ASW_DOOR_COMPLETE_DENT_HEALTH 0.33f
// DamageCustom flags for CTakeDamageInfo
#define DAMAGE_FLAG_WEAKSPOT 0x0001
#define DAMAGE_FLAG_CRITICAL 0x0002
#define DAMAGE_FLAG_T75 0x0004
#define DAMAGE_FLAG_NO_FALLOFF 0x0008
#define DAMAGE_FLAG_HALF_FALLOFF 0x0010
enum {
ASW_VOTE_NONE = 0,
ASW_VOTE_SAVED_CAMPAIGN,
ASW_VOTE_CHANGE_MISSION,
};
#define ASW_GIBFLAG_ON_FIRE 0x001
#define ASW_NUM_FIRE_EMITTERS 4
enum
{
ASW_COLLISION_GROUP_GRUBS = LAST_SHARED_COLLISION_GROUP,
ASW_COLLISION_GROUP_PARASITE,
ASW_COLLISION_GROUP_ALIEN,
// HOUNDEYE = grubs
ASW_COLLISION_GROUP_MARINE_POSITION_PREDICTION, // asw
ASW_COLLISION_GROUP_SHOTGUN_PELLET, // asw
ASW_COLLISION_GROUP_EGG, // asw (alien eggs)
ASW_COLLISION_GROUP_BLOCK_DRONES, // asw
ASW_COLLISION_GROUP_BIG_ALIEN, // asw (shieldbug, queen)
ASW_COLLISION_GROUP_BUZZER,
ASW_COLLISION_GROUP_BODY_SNATCHER, // asw (shieldbug, queen)
ASW_COLLISION_GROUP_GRENADES, // doesn't collide with marines
ASW_COLLISION_GROUP_NPC_GRENADES, // doesn't collide with npcs
ASW_COLLISION_GROUP_BLOB_TINY,
ASW_COLLISION_GROUP_ALIEN_MISSILE, // collides with non-alien NPCs
ASW_COLLISION_GROUP_PLAYER_MISSILE, // collides with aliens, not players
ASW_COLLISION_GROUP_SENTRY, // collides with aliens
ASW_COLLISION_GROUP_SENTRY_PROJECTILE, // collides with aliens, marines and doors - nothing else (this is used for the sentry particles)
ASW_COLLISION_GROUP_BLOCK_ALIENS, // asw
ASW_COLLISION_GROUP_IGNORE_NPCS, // asw (fire walls spreading, collides with everything but aliens, marines) NOTE: Has to be after any NPC collision groups
ASW_COLLISION_GROUP_FLAMER_PELLETS, // the pellets that the flamer shoots. Doesn not collide with small aliens or marines, DOES collide with doors and shieldbugs
ASW_COLLISION_GROUP_EXTINGUISHER_PELLETS, // the pellets that the extinguisher shoots. Hits lots of things, but not other weapons
ASW_COLLISION_GROUP_PASSABLE, // asw (stuff you can walk through) NOTE: Has to be LAST!
HL2COLLISION_GROUP_COMBINE_BALL_NPC,
};
enum FailAdviceMessage
{
ASW_FAIL_ADVICE_DEFAULT = 0,
ASW_FAIL_ADVICE_LOW_AMMO,
ASW_FAIL_ADVICE_INFESTED_LOTS,
ASW_FAIL_ADVICE_INFESTED,
ASW_FAIL_ADVICE_SWARMED,
ASW_FAIL_ADVICE_FRIENDLY_FIRE,
ASW_FAIL_ADVICE_HACKER_DAMAGED,
ASW_FAIL_ADVICE_WASTED_HEALS,
ASW_FAIL_ADVICE_IGNORED_HEALING,
ASW_FAIL_ADVICE_IGNORED_ADRENALINE,
ASW_FAIL_ADVICE_IGNORED_SECONDARY,
ASW_FAIL_ADVICE_IGNORED_WELDER,
ASW_FAIL_ADVICE_IGNORED_LIGHTING, // TODO
ASW_FAIL_ADVICE_SLOW_PROGRESSION,
ASW_FAIL_ADVICE_SHIELD_BUG,
ASW_FAIL_ADVICE_DIED_ALONE,
ASW_FAIL_ADVICE_NO_MEDICS,
ASW_FAIL_ADVICE_TOTAL
};
enum PowerUpTypes
{
POWERUP_TYPE_FREEZE_BULLETS = 0,
POWERUP_TYPE_FIRE_BULLETS,
POWERUP_TYPE_ELECTRIC_BULLETS,
//POWERUP_TYPE_CHEMICAL_BULLETS,
//POWERUP_TYPE_EXPLOSIVE_BULLETS,
// all gun powerups that get removed on reload should go above here
POWERUP_TYPE_INCREASED_SPEED,
NUM_POWERUP_TYPES
};
#define ASW_MOVEMENT_WALK_SPEED 150
#define ASW_MOVEMENT_NORM_SPEED 190
#define HL2COLLISION_GROUP_FIRST_NPC ASW_COLLISION_GROUP_GRUBS
#define HL2COLLISION_GROUP_LAST_NPC ASW_COLLISION_GROUP_ALIEN
bool IsAlienCollisionGroup( int iCollisionGroup );
#define IN_ASW_STOP (1 << 26) // asw: this button will stop the marine's x/y motion immediately (used to hold him still while he plays stationary animations, also may be need for clientside avoidance)
bool IsAlienClass( Class_T npc_class );
bool IsDamagingWeaponClass( Class_T entity_class );
bool IsWeaponClass( Class_T entity_class );
bool IsBulletBasedWeaponClass( Class_T entity_class );
bool IsSentryClass( Class_T entity_class );
bool CanMarineGetStuckOnProp( const char *szModelName );
//-----------------------------------------------------------------------------
// Alien projectiles
//-----------------------------------------------------------------------------
class CASW_AlienShot
{
public:
CASW_AlienShot()
{
m_flSize = 0.0f;
m_flDamage_direct = 0.0f;
m_flDamage_splash = 0.0f;
m_flSeek_strength = 0.0f;
m_flGravity = 0.0f;
m_flFuse = 0.0f;
m_flBounce = 0.0f;
m_bShootable = false;
}
CASW_AlienShot( const CASW_AlienShot &shot )
{
m_strName = shot.m_strName;
m_flSize = shot.m_flSize;
m_flDamage_direct = shot.m_flDamage_direct;
m_flDamage_splash = shot.m_flDamage_splash;
m_flSeek_strength = shot.m_flSeek_strength;
m_flGravity = shot.m_flGravity;
m_flFuse = shot.m_flFuse;
m_flBounce = shot.m_flBounce;
m_bShootable = shot.m_bShootable;
m_strModel = shot.m_strModel;
m_strSound_spawn = shot.m_strSound_spawn;
m_strSound_hitNPC = shot.m_strSound_hitNPC;
m_strSound_hitWorld = shot.m_strSound_hitWorld;
m_strParticles_trail = shot.m_strParticles_trail;
m_strParticles_hit = shot.m_strParticles_hit;
}
public:
CUtlString m_strName;
float m_flSize;
float m_flDamage_direct;
float m_flDamage_splash; //FIXME: not implemented yet
float m_flSeek_strength; //FIXME: not implemented yet
float m_flGravity;
float m_flFuse;
float m_flBounce;
bool m_bShootable;
CUtlString m_strModel;
CUtlString m_strSound_spawn;
CUtlString m_strSound_hitNPC;
CUtlString m_strSound_hitWorld;
CUtlString m_strParticles_trail;
CUtlString m_strParticles_hit;
};
class CASW_AlienVolleyRound
{
public:
CASW_AlienVolleyRound()
{
m_flTime = 0.0f;
m_flStartAngle = 0.0f;
m_flEndAngle = 0.0f;
m_nNumShots = 0;
m_flShotDelay = 0.0f;
m_flSpeed = 0.0f;
m_flHorizontalOffset = 0.0f;
}
CASW_AlienVolleyRound( const CASW_AlienVolleyRound &volley )
{
m_flTime = volley.m_flTime;
m_nShot_type = volley.m_nShot_type;
m_flStartAngle = volley.m_flStartAngle;
m_flEndAngle = volley.m_flEndAngle;
m_nNumShots = volley.m_nNumShots;
m_flShotDelay = volley.m_flShotDelay;
m_flSpeed = volley.m_flSpeed;
m_flHorizontalOffset = volley.m_flHorizontalOffset;
}
public:
float m_flTime;
int m_nShot_type;
float m_flStartAngle;
float m_flEndAngle;
int m_nNumShots;
float m_flShotDelay;
float m_flSpeed;
float m_flHorizontalOffset;
};
class CASW_AlienVolley
{
public:
CASW_AlienVolley() {}
CASW_AlienVolley( const CASW_AlienVolley &volley )
{
m_strName = volley.m_strName;
m_rounds.SetCount( volley.m_rounds.Count() );
for( int i = 0; i < m_rounds.Count(); i++ )
{
m_rounds[ i ] = volley.m_rounds[ i ];
}
}
public:
CUtlString m_strName;
CUtlVector<CASW_AlienVolleyRound> m_rounds;
};
// For CLASSIFY
enum
{
// Alien Swarm AI
// Be sure to add appropriate checks in IsAlienClass() in asw_shareddefs.cpp
// and s_alienClasses in asw_gamerules.cpp
// CLASS_BLOB = tiny blob
//////////////////////////////////////////////////////////////////////////
// IMPORTANT: New classes need to be added to the end of this list otherwise
// it throws off the stats reporting page (one build has CLASS_ASW_RIFLE = 60,
// the next has ASW_CLASS_RIFLE = 61, bad juju) Thanks ^_^
//////////////////////////////////////////////////////////////////////////
CLASS_ASW_DRONE = LAST_SHARED_ENTITY_CLASS,
CLASS_ASW_SHIELDBUG,
CLASS_ASW_PARASITE,
CLASS_ASW_UNKNOWN,
CLASS_ASW_HARVESTER,
CLASS_ASW_GRUB,
CLASS_ASW_HYDRA,
CLASS_ASW_BLOB,
CLASS_ASW_SENTRY_GUN,
CLASS_ASW_BUTTON_PANEL,
CLASS_ASW_COMPUTER_AREA,
CLASS_ASW_DOOR_AREA,
CLASS_ASW_DOOR,
CLASS_ASW_MARINE,
CLASS_ASW_COLONIST,
CLASS_ASW_BOOMER,
CLASS_ASW_BOOMERMINI,
CLASS_ASW_MEATBUG,
CLASS_ASW_QUEEN,
CLASS_ASW_BUZZER,
CLASS_ASW_QUEEN_DIVER,
CLASS_ASW_QUEEN_GRABBER,
CLASS_ASW_ALIEN_GOO,
CLASS_ASW_T75,
CLASS_ASW_SHAMAN,
CLASS_ASW_EGG,
CLASS_ASW_RUNNER,
CLASS_ASW_MORTAR_BUG,
CLASS_ASW_RANGER,
CLASS_ASW_FLOCK,
CLASS_ASW_SPAWNER,
CLASS_ASW_HOLDOUT_SPAWNER,
CLASS_ASW_SPAWN_GROUP,
CLASS_ASW_NIGHT_VISION,
CLASS_ASW_SNIPER_RIFLE,
CLASS_ASW_STATUE,
CLASS_ASW_BAIT,
CLASS_ASW_FRIENDLY_ALIEN,
CLASS_ASW_RIFLE,
CLASS_ASW_MINIGUN,
CLASS_ASW_PDW,
CLASS_ASW_FLECHETTE,
CLASS_ASW_FIRE_EXTINGUISHER,
CLASS_ASW_WELDER,
CLASS_ASW_TESLA_TRAP,
CLASS_ASW_STIM,
CLASS_ASW_SHOTGUN,
CLASS_ASW_SENTRY_FLAMER,
CLASS_ASW_SENTRY_CANNON,
CLASS_ASW_SENTRY_FREEZE,
CLASS_ASW_RICOCHET,
CLASS_ASW_RAILGUN,
CLASS_ASW_PRIFLE,
CLASS_ASW_PISTOL,
CLASS_ASW_MINING_LASER,
CLASS_ASW_MINES,
CLASS_ASW_MEDKIT,
CLASS_ASW_MEDICAL_SATCHEL,
CLASS_ASW_LASER_MINES,
CLASS_ASW_HORNET_BARRAGE,
CLASS_ASW_HEALGRENADE,
CLASS_ASW_GRENADES,
CLASS_ASW_GRENADE_LAUNCHER,
CLASS_ASW_FREEZE_GRENADES,
CLASS_ASW_FLASHLIGHT,
CLASS_ASW_FLARES,
CLASS_ASW_FLAMER,
CLASS_ASW_ELECTRIFIED_ARMOR,
CLASS_ASW_CHAINSAW,
CLASS_ASW_BUFF_GRENADE,
CLASS_ASW_AUTOGUN,
CLASS_ASW_ASSAULT_SHOTGUN,
CLASS_ASW_AMMO_BAG,
CLASS_ASW_AMMO_RIFLE,
CLASS_ASW_AMMO_AUTOGUN,
CLASS_ASW_AMMO_SHOTGUN,
CLASS_ASW_AMMO_ASSAULT_SHOTGUN,
CLASS_ASW_AMMO_FLAMER,
CLASS_ASW_AMMO_PISTOL,
CLASS_ASW_AMMO_MINING_LASER,
CLASS_ASW_AMMO_RAILGUN,
CLASS_ASW_AMMO_CHAINSAW,
CLASS_ASW_AMMO_PDW,
CLASS_ASW_RIFLE_GRENADE,
CLASS_ASW_GRENADE_VINDICATOR,
CLASS_ASW_GRENADE_CLUSER,
CLASS_ASW_FLAMER_PROJECTILE,
CLASS_ASW_BURNING,
CLASS_ASW_GRENADE_PRIFLE,
CLASS_ASW_TESLA_GUN,
CLASS_ASW_HEAL_GUN,
CLASS_ASW_SENTRY_GUN_CASE,
CLASS_ASW_SENTRY_CANNON_CASE,
CLASS_ASW_SENTRY_FLAMER_CASE,
CLASS_ASW_SENTRY_FREEZE_CASE,
CLASS_ASW_NORMAL_ARMOR,
CLASS_ASW_MORTAR_SHELL,
CLASS_ASW_SMART_BOMB,
CLASS_ASW_FIST,
CLASS_ASW_BLINK,
CLASS_ASW_JUMP_JET,
CLASS_ASW_AMMO_SATCHEL,
CLASS_ASW_TESLA_TRAP_PROJECTILE,
CLASS_ASW_LASER_MINE_PROJECTILE,
CLASS_ASW_EXPLOSIVE_BARREL,
CLASS_ASW_HEALGRENADE_PROJECTILE,
CLASS_ASW_REMOTE_TURRET,
CLASS_ASW_FIRE,
CLASS_ASW_PHYSICS_PROP,
CLASS_ASW_SENTRY_BASE, // bottom part of a deployed sentry gun
// Add new classes here ^^^^
LAST_ASW_ENTITY_CLASS,
};
// Alien Swarm specific hitgroups
enum
{
HITGROUP_BONE_SHIELD = HITGROUP_GEAR + 1,
};
#define ASW_XP_CAP 42250
#define ASW_LEVEL_CAP 26
#define ASW_PROMOTION_CAP 3
extern ConVar asw_visrange_generic;
#ifdef CLIENT_DLL
// interface for entities that want to show health bars
DECLARE_AUTO_LIST( IHealthTrackedAutoList );
abstract_class IHealthTracked : public IHealthTrackedAutoList
{
public:
IHealthTracked( bool bAutoAdd = true ) : IHealthTrackedAutoList( bAutoAdd ) {}
virtual void PaintHealthBar( class CASWHud3DMarineNames *pSurface ) = 0;
};
#endif
#endif // ASW_SHAREDDEFS_H