mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
The LayerProp palette lookup was gated on the *filter* attribute instead of the *palette* attribute -- the filter checks from the line above were copy-pasted verbatim. As a result, any LayerProp with an empty filter but a real palette never resolved its palette table: paletteTable stayed NULL and the layer fell back to the merc's shade table. The most visible victim is the heli fast-rope arrival layer (filter="" palette="hats"): rendered with the merc palette, the rope's pixel indices (45-81, 166-172) hit the merc's unreplaced orange/red glow ramp instead of the rope's own tan/green, painting orange specks along the rope. Testing the palette attribute restores the intended "hats" palette and the correct rope colours; it also fixes any other empty-filter layers. Co-Authored-By: Claude Opus 4.7
1097 lines
26 KiB
C++
1097 lines
26 KiB
C++
#include "BodyTypeDB.h"
|
|
|
|
namespace LogicalBodyTypes {
|
|
|
|
BodyTypeDB::BodyTypeDB(void) : AbstractXMLLoader(StartElementHandle, EndElementHandle, CharacterDataHandle, MakeParseData) {
|
|
RegisterEnumerators();
|
|
}
|
|
|
|
BodyTypeDB::~BodyTypeDB(void) {
|
|
for (BodyTypeList::iterator i = bodyTypes.begin(); i != bodyTypes.end(); i++) {
|
|
delete *i;
|
|
}
|
|
}
|
|
|
|
void BodyTypeDB::Add(BodyType* bodyType) {
|
|
bodyTypes.push_back(bodyType);
|
|
}
|
|
|
|
AbstractXMLLoader::ParseData* BodyTypeDB::MakeParseData(XML_Parser* parser) {
|
|
return new ParseData(parser);
|
|
}
|
|
|
|
void BodyTypeDB::StartElementHandle(void* userData, const XML_Char* name, const XML_Char** atts) {
|
|
ParseData* data = (ParseData*)userData;
|
|
switch (data->state) {
|
|
case E_NONE:
|
|
if (strcmp(name, "LogicalBodyTypes") == 0) {
|
|
data->state = E_ELEMENT_BODYTYPES;
|
|
break;
|
|
}
|
|
case E_ELEMENT_BODYTYPES:
|
|
if (strcmp(name, "LogicalBodyType") == 0) {
|
|
data->state = E_ELEMENT_BODYTYPE;
|
|
XML_Char const* filterIdent = GetAttribute("filter", atts);
|
|
XML_Char const* cacheSize = GetAttribute("cachesize", atts);
|
|
Filter* f = NULL;
|
|
if (filterIdent != NULL && strcmp(filterIdent, "") != 0) {
|
|
f = FilterDB::Instance().FindFilter(filterIdent);
|
|
if (f == NULL) throw XMLParseException("Unknown filter specified!", name, data->pParser);
|
|
}
|
|
UINT32 size = 16;
|
|
if (cacheSize != NULL) {
|
|
if (!ConvertStringToUINT32(cacheSize, &size)) throw XMLParseException("Attribute 'value' doesn't have a valid value!", name, data->pParser);
|
|
if (size < 2) throw XMLParseException("Minimum cache size is 2!", name, data->pParser);
|
|
}
|
|
data->currentBodyType = new BodyType(size, f);
|
|
data->layerPropertiesConfig.clear();
|
|
break;
|
|
}
|
|
case E_ELEMENT_BODYTYPE:
|
|
if (strcmp(name, "LayerConfigurations") == 0) {
|
|
data->state = E_ELEMENT_LAYER_CONFIGS;
|
|
break;
|
|
}
|
|
if (strcmp(name, "LogicalAnimationSurfaces") == 0) {
|
|
data->state = E_ELEMENT_SURFACES;
|
|
break;
|
|
}
|
|
case E_ELEMENT_LAYER_CONFIGS:
|
|
if (strcmp(name, "LayerConfiguration") == 0) {
|
|
data->state = E_ELEMENT_LAYER_CONFIG;
|
|
XML_Char const* aName = GetAttribute("name", atts);
|
|
XML_Char const* aRender = GetAttribute("render", atts);
|
|
XML_Char const* aShadow = GetAttribute("shadow", atts);
|
|
if (aName == NULL) {
|
|
throw XMLParseException("Mandatory attribute missing!", name, data->pParser);
|
|
}
|
|
std::string strLayer = aName;
|
|
Layers::LayerPropertiesVector::size_type layer = Layers::Instance().GetIndex(strLayer);
|
|
if (layer == -1) throw XMLParseException("Unknown layer specified!", name, data->pParser);
|
|
Layers::LayerProperties temp = Layers::Instance().GetLayerProperties(layer); // copy default configuration for layer
|
|
if (aRender != NULL) {
|
|
BOOLEAN fRender;
|
|
if (!ConvertStringToBOOLEAN(aRender, &fRender)) throw XMLParseException("Attribute 'value' doesn't have a valid value!", name, data->pParser);
|
|
temp.render = fRender == TRUE;
|
|
|
|
}
|
|
if (aShadow != NULL) {
|
|
BOOLEAN fShadow;
|
|
if (!ConvertStringToBOOLEAN(aShadow, &fShadow)) throw XMLParseException("Attribute 'value' doesn't have a valid value!", name, data->pParser);
|
|
temp.renderShadows = fShadow == TRUE;
|
|
}
|
|
data->layerPropertiesConfig[layer] = temp;
|
|
break;
|
|
}
|
|
case E_ELEMENT_SURFACES:
|
|
if (strcmp(name, "Layer") == 0) {
|
|
data->state = E_ELEMENT_LAYER;
|
|
XML_Char const* aLayer = GetAttribute("name", atts);
|
|
if (aLayer == NULL) {
|
|
throw XMLParseException("Mandatory attribute missing!", name, data->pParser);
|
|
}
|
|
std::string strLayer = aLayer;
|
|
data->layer = Layers::Instance().GetIndex(strLayer);
|
|
if (data->layer == -1) throw XMLParseException("Unknown layer specified!", name, data->pParser);
|
|
break;
|
|
}
|
|
case E_ELEMENT_LAYER:
|
|
if (strcmp(name, "LayerProp") == 0) {
|
|
data->state = E_ELEMENT_PROP;
|
|
XML_Char const* aFilter = GetAttribute("filter", atts);
|
|
XML_Char const* aPalette = GetAttribute("palette", atts);
|
|
data->filter = NULL;
|
|
data->paletteTable = NULL;
|
|
if (aFilter != NULL && strcmp(aFilter, "") != 0) {
|
|
data->filter = FilterDB::Instance().FindFilter(aFilter);
|
|
if (data->filter == NULL) throw XMLParseException("Unknown filter specified!", name, data->pParser);
|
|
}
|
|
if (aPalette != NULL && strcmp(aPalette, "") != 0 && strcmp(aPalette, "default") != 0) {
|
|
data->paletteTable = PaletteDB::Instance().FindPaletteTable(aPalette);
|
|
if (data->paletteTable == NULL) throw XMLParseException("Unknown palette specified!", name, data->pParser);
|
|
}
|
|
break;
|
|
}
|
|
case E_ELEMENT_PROP:
|
|
if (strcmp(name, "Surface") == 0) {
|
|
data->state = E_ELEMENT_SURFACE;
|
|
XML_Char const* aSurface = GetAttribute("name", atts);
|
|
XML_Char const* aAnimState = GetAttribute("animstate", atts);
|
|
XML_Char const* aPhysSurface = GetAttribute("animsurface", atts);
|
|
if (aSurface == NULL || (aAnimState == NULL && aPhysSurface == NULL)) {
|
|
throw XMLParseException("Mandatory attribute missing!", name, data->pParser);
|
|
}
|
|
if (aAnimState == NULL && aPhysSurface == NULL) {
|
|
// we could allow this
|
|
// but we should than make 2 seperate animation surface type instances (that are equivalent) which is not nice
|
|
// we could use the same instance, but it has to bee ascertained that the cache can handle it first!
|
|
throw XMLParseException("Only one attribute of animstate and animsurface may be specified!!", name, data->pParser);
|
|
}
|
|
AnimationSurfaceType* surface = SurfaceDB::Instance().GetAnimSurfaceType(aSurface);
|
|
std::string nameAlpha = aSurface;
|
|
nameAlpha += "###ALPHA";
|
|
AnimationSurfaceType* surfaceAlpha = SurfaceDB::Instance().GetAnimSurfaceType(nameAlpha.c_str());
|
|
if (surface == NULL) throw XMLParseException("Unknown animation surface specified!", name, data->pParser);
|
|
if (aAnimState != NULL) {
|
|
int iAnimState;
|
|
if (!EnumeratorDB::Instance().GetEnumeratorByStr("AnimationStates", aAnimState, iAnimState)) {
|
|
throw XMLParseException("Unknown animation state specified!", name, data->pParser);
|
|
}
|
|
data->currentBodyType->AddSurfaceForAnimState(iAnimState, data->layer, surface, surfaceAlpha, data->filter, data->paletteTable);
|
|
}
|
|
if (aPhysSurface != NULL) {
|
|
int iAnimSurface;
|
|
if (!EnumeratorDB::Instance().GetEnumeratorByStr("AnimationSurfaces", aPhysSurface, iAnimSurface)) {
|
|
throw XMLParseException("Unknown animation surface specified!", name, data->pParser);
|
|
}
|
|
data->currentBodyType->AddSurfaceForPhysSurface(iAnimSurface, data->layer, surface, surfaceAlpha, data->filter, data->paletteTable);
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
throw XMLParseException("Unexpected element!", name, data->pParser);
|
|
}
|
|
}
|
|
|
|
void BodyTypeDB::EndElementHandle(void* userData, const XML_Char* name) {
|
|
ParseData* data = (ParseData*)userData;
|
|
switch (data->state) {
|
|
case E_ELEMENT_SURFACE:
|
|
if (strcmp(name, "Surface") == 0) {
|
|
data->state = E_ELEMENT_PROP;
|
|
break;
|
|
}
|
|
case E_ELEMENT_PROP:
|
|
if (strcmp(name, "LayerProp") == 0) {
|
|
data->state = E_ELEMENT_LAYER;
|
|
break;
|
|
}
|
|
case E_ELEMENT_LAYER:
|
|
if (strcmp(name, "Layer") == 0) {
|
|
data->state = E_ELEMENT_SURFACES;
|
|
break;
|
|
}
|
|
case E_ELEMENT_SURFACES:
|
|
if (strcmp(name, "LogicalAnimationSurfaces") == 0) {
|
|
data->state = E_ELEMENT_BODYTYPE;
|
|
break;
|
|
}
|
|
case E_ELEMENT_LAYER_CONFIG:
|
|
if (strcmp(name, "LayerConfiguration") == 0) {
|
|
data->state = E_ELEMENT_LAYER_CONFIGS;
|
|
break;
|
|
}
|
|
case E_ELEMENT_LAYER_CONFIGS:
|
|
if (strcmp(name, "LayerConfigurations") == 0) {
|
|
data->state = E_ELEMENT_BODYTYPE;
|
|
break;
|
|
}
|
|
case E_ELEMENT_BODYTYPE:
|
|
if (strcmp(name, "LogicalBodyType") == 0) {
|
|
data->state = E_ELEMENT_BODYTYPES;
|
|
std::map<Layers::LayerPropertiesVector::size_type, Layers::LayerProperties>::iterator i = data->layerPropertiesConfig.begin();
|
|
for (; i != data->layerPropertiesConfig.end(); i++) {
|
|
data->currentBodyType->SetLayerProperties(i->first, i->second);
|
|
}
|
|
BodyTypeDB::Instance().Add(data->currentBodyType);
|
|
data->currentBodyType = NULL; // in case an exception is raised between here and the start of the next bodytype element
|
|
break;
|
|
}
|
|
case E_ELEMENT_BODYTYPES:
|
|
if (strcmp(name, "LogicalBodyTypes") == 0) {
|
|
data->state = E_NONE;
|
|
break;
|
|
}
|
|
default:
|
|
throw XMLParseException("Unexpected element! Closing tag missing?", name, data->pParser);
|
|
return;
|
|
}
|
|
}
|
|
|
|
void BodyTypeDB::CharacterDataHandle(void* userData, const XML_Char* str, int len) {
|
|
}
|
|
|
|
void BodyTypeDB::RegisterEnumerators() {
|
|
|
|
/*****************************************
|
|
Animation states
|
|
******************************************/
|
|
LOGBT_ENUMDB_ADD("AnimationStates", NUMANIMATIONSTATES,
|
|
WALKING,
|
|
STANDING,
|
|
KNEEL_DOWN,
|
|
CROUCHING,
|
|
KNEEL_UP,
|
|
SWATTING,
|
|
RUNNING,
|
|
PRONE_DOWN,
|
|
CRAWLING,
|
|
PRONE_UP,
|
|
PRONE,
|
|
READY_RIFLE_STAND,
|
|
AIM_RIFLE_STAND,
|
|
SHOOT_RIFLE_STAND,
|
|
END_RIFLE_STAND,
|
|
START_SWAT,
|
|
END_SWAT,
|
|
FLYBACK_HIT,
|
|
READY_RIFLE_PRONE,
|
|
AIM_RIFLE_PRONE,
|
|
SHOOT_RIFLE_PRONE,
|
|
END_RIFLE_PRONE,
|
|
FALLBACK_DEATHTWICH,
|
|
GENERIC_HIT_STAND,
|
|
FLYBACK_HIT_BLOOD_STAND,
|
|
FLYBACK_HIT_DEATH,
|
|
READY_RIFLE_CROUCH,
|
|
AIM_RIFLE_CROUCH,
|
|
SHOOT_RIFLE_CROUCH,
|
|
END_RIFLE_CROUCH,
|
|
FALLBACK_HIT_STAND,
|
|
ROLLOVER,
|
|
CLIMBUPROOF,
|
|
FALLOFF,
|
|
GETUP_FROM_ROLLOVER,
|
|
CLIMBDOWNROOF,
|
|
FALLFORWARD_ROOF,
|
|
GENERIC_HIT_DEATHTWITCHNB,
|
|
GENERIC_HIT_DEATHTWITCHB,
|
|
FALLBACK_HIT_DEATHTWITCHNB,
|
|
FALLBACK_HIT_DEATHTWITCHB,
|
|
GENERIC_HIT_DEATH,
|
|
FALLBACK_HIT_DEATH,
|
|
GENERIC_HIT_CROUCH,
|
|
STANDING_BURST,
|
|
STANDING_BURST_HIT,
|
|
FALLFORWARD_FROMHIT_STAND,
|
|
FALLFORWARD_FROMHIT_CROUCH,
|
|
ENDFALLFORWARD_FROMHIT_CROUCH,
|
|
GENERIC_HIT_PRONE,
|
|
PRONE_HIT_DEATH,
|
|
PRONE_LAY_FROMHIT,
|
|
PRONE_HIT_DEATHTWITCHNB,
|
|
PRONE_HIT_DEATHTWITCHB,
|
|
ADULTMONSTER_BREATHING,
|
|
ADULTMONSTER_WALKING,
|
|
ADULTMONSTER_ATTACKING,
|
|
FLYBACK_HITDEATH_STOP,
|
|
FALLFORWARD_HITDEATH_STOP,
|
|
FALLBACK_HITDEATH_STOP,
|
|
PRONE_HITDEATH_STOP,
|
|
FLYBACKHIT_STOP,
|
|
FALLBACKHIT_STOP,
|
|
FALLOFF_STOP,
|
|
FALLOFF_FORWARD_STOP,
|
|
STAND_FALLFORWARD_STOP,
|
|
PRONE_LAYFROMHIT_STOP,
|
|
HOPFENCE,
|
|
ADULTMONSTER_HIT,
|
|
ADULTMONSTER_DYING,
|
|
ADULTMONSTER_DYING_STOP,
|
|
PUNCH_BREATH,
|
|
PUNCH,
|
|
NOTHING_STAND,
|
|
JFK_HITDEATH,
|
|
JFK_HITDEATH_STOP,
|
|
JFK_HITDEATH_TWITCHB,
|
|
FIRE_STAND_BURST_SPREAD,
|
|
FALLOFF_DEATH,
|
|
FALLOFF_DEATH_STOP,
|
|
FALLOFF_TWITCHB,
|
|
FALLOFF_TWITCHNB,
|
|
FALLOFF_FORWARD_DEATH,
|
|
FALLOFF_FORWARD_DEATH_STOP,
|
|
FALLOFF_FORWARD_TWITCHB,
|
|
FALLOFF_FORWARD_TWITCHNB,
|
|
OPEN_DOOR,
|
|
OPEN_STRUCT,
|
|
PICKUP_ITEM,
|
|
DROP_ITEM,
|
|
SLICE,
|
|
STAB,
|
|
CROUCH_STAB,
|
|
START_AID,
|
|
GIVING_AID,
|
|
END_AID,
|
|
DODGE_ONE,
|
|
FATCIV_ASS_SCRATCH,
|
|
READY_DUAL_STAND,
|
|
AIM_DUAL_STAND,
|
|
SHOOT_DUAL_STAND,
|
|
END_DUAL_STAND,
|
|
RAISE_RIFLE,
|
|
LOWER_RIFLE,
|
|
BODYEXPLODING,
|
|
THROW_ITEM,
|
|
LOB_ITEM,
|
|
QUEEN_MONSTER_BREATHING,
|
|
CROUCHED_BURST,
|
|
PRONE_BURST,
|
|
NOTUSEDANIM1,
|
|
BIGBUY_FLEX,
|
|
BIGBUY_STRECH,
|
|
BIGBUY_SHOEDUST,
|
|
BIGBUY_HEADTURN,
|
|
MINIGIRL_STOCKING,
|
|
GIVE_ITEM,
|
|
CLIMB_CLIFF,
|
|
COW_EATING,
|
|
COW_HIT,
|
|
COW_DYING,
|
|
COW_DYING_STOP,
|
|
WATER_HIT,
|
|
WATER_DIE,
|
|
WATER_DIE_STOP,
|
|
CROW_WALK,
|
|
CROW_TAKEOFF,
|
|
CROW_LAND,
|
|
CROW_FLY,
|
|
CROW_EAT,
|
|
HELIDROP,
|
|
FEM_CLEAN,
|
|
FEM_KICKSN,
|
|
FEM_LOOK,
|
|
FEM_WIPE,
|
|
REG_SQUISH,
|
|
REG_PULL,
|
|
REG_SPIT,
|
|
HATKID_YOYO,
|
|
KID_ARMPIT,
|
|
MONSTER_CLOSE_ATTACK,
|
|
MONSTER_SPIT_ATTACK,
|
|
MONSTER_BEGIN_EATTING_FLESH,
|
|
MONSTER_EATTING_FLESH,
|
|
MONSTER_END_EATTING_FLESH,
|
|
BLOODCAT_RUN,
|
|
BLOODCAT_STARTREADY,
|
|
BLOODCAT_READY,
|
|
BLOODCAT_ENDREADY,
|
|
BLOODCAT_HIT,
|
|
BLOODCAT_DYING,
|
|
BLOODCAT_DYING_STOP,
|
|
BLOODCAT_SWIPE,
|
|
NINJA_GOTOBREATH,
|
|
NINJA_BREATH,
|
|
NINJA_LOWKICK,
|
|
NINJA_PUNCH,
|
|
NINJA_SPINKICK,
|
|
END_OPEN_DOOR,
|
|
END_OPEN_LOCKED_DOOR,
|
|
KICK_DOOR,
|
|
CLOSE_DOOR,
|
|
RIFLE_STAND_HIT,
|
|
DEEP_WATER_TRED,
|
|
DEEP_WATER_SWIM,
|
|
DEEP_WATER_HIT,
|
|
DEEP_WATER_DIE,
|
|
DEEP_WATER_DIE_STOPPING,
|
|
DEEP_WATER_DIE_STOP,
|
|
LOW_TO_DEEP_WATER,
|
|
DEEP_TO_LOW_WATER,
|
|
GOTO_SLEEP,
|
|
SLEEPING,
|
|
WKAEUP_FROM_SLEEP,
|
|
FIRE_LOW_STAND,
|
|
FIRE_BURST_LOW_STAND,
|
|
LARVAE_BREATH,
|
|
LARVAE_HIT,
|
|
LARVAE_DIE,
|
|
LARVAE_DIE_STOP,
|
|
LARVAE_WALK,
|
|
INFANT_HIT,
|
|
INFANT_DIE,
|
|
INFANT_DIE_STOP,
|
|
INFANT_ATTACK,
|
|
INFANT_BEGIN_EATTING_FLESH,
|
|
INFANT_EATTING_FLESH,
|
|
INFANT_END_EATTING_FLESH,
|
|
MONSTER_UP,
|
|
MONSTER_JUMP,
|
|
STANDING_SHOOT_UNJAM,
|
|
CROUCH_SHOOT_UNJAM,
|
|
PRONE_SHOOT_UNJAM,
|
|
STANDING_SHOOT_DWEL_UNJAM,
|
|
STANDING_SHOOT_LOW_UNJAM,
|
|
READY_DUAL_CROUCH,
|
|
AIM_DUAL_CROUCH,
|
|
SHOOT_DUAL_CROUCH,
|
|
END_DUAL_CROUCH,
|
|
CROUCH_SHOOT_DWEL_UNJAM,
|
|
ADJACENT_GET_ITEM,
|
|
CUTTING_FENCE,
|
|
CRIPPLE_BEG,
|
|
CRIPPLE_HIT,
|
|
CRIPPLE_DIE,
|
|
CRIPPLE_DIE_STOP,
|
|
CRIPPLE_DIE_FLYBACK,
|
|
CRIPPLE_DIE_FLYBACK_STOP,
|
|
CRIPPLE_KICKOUT,
|
|
FROM_INJURED_TRANSITION,
|
|
THROW_KNIFE,
|
|
KNIFE_BREATH,
|
|
KNIFE_GOTOBREATH,
|
|
KNIFE_ENDBREATH,
|
|
ROBOTNW_HIT,
|
|
ROBOTNW_DIE,
|
|
ROBOTNW_DIE_STOP,
|
|
CATCH_STANDING,
|
|
CATCH_CROUCHED,
|
|
PLANT_BOMB,
|
|
USE_REMOTE,
|
|
START_COWER,
|
|
COWERING,
|
|
END_COWER,
|
|
STEAL_ITEM,
|
|
SHOOT_ROCKET,
|
|
CIV_DIE2,
|
|
SHOOT_MORTAR,
|
|
CROW_DIE,
|
|
SIDE_STEP,
|
|
WALK_BACKWARDS,
|
|
BEGIN_OPENSTRUCT,
|
|
END_OPENSTRUCT,
|
|
END_OPENSTRUCT_LOCKED,
|
|
PUNCH_LOW,
|
|
PISTOL_SHOOT_LOW,
|
|
DECAPITATE,
|
|
BLOODCAT_BITE_ANIM,
|
|
BIGMERC_IDLE_NECK,
|
|
BIGMERC_CROUCH_TRANS_INTO,
|
|
BIGMERC_CROUCH_TRANS_OUTOF,
|
|
GOTO_PATIENT,
|
|
BEING_PATIENT,
|
|
GOTO_DOCTOR,
|
|
BEING_DOCTOR,
|
|
END_DOCTOR,
|
|
GOTO_REPAIRMAN,
|
|
BEING_REPAIRMAN,
|
|
END_REPAIRMAN,
|
|
FALL_INTO_PIT,
|
|
ROBOT_WALK,
|
|
ROBOT_SHOOT,
|
|
QUEEN_HIT,
|
|
QUEEN_DIE,
|
|
QUEEN_DIE_STOP,
|
|
QUEEN_INTO_READY,
|
|
QUEEN_READY,
|
|
QUEEN_END_READY,
|
|
QUEEN_CALL,
|
|
QUEEN_SPIT,
|
|
QUEEN_SWIPE,
|
|
RELOAD_ROBOT,
|
|
END_CATCH,
|
|
END_CROUCH_CATCH,
|
|
AI_RADIO,
|
|
AI_CR_RADIO,
|
|
TANK_SHOOT,
|
|
TANK_BURST,
|
|
QUEEN_SLAP,
|
|
SLAP_HIT,
|
|
TAKE_BLOOD_FROM_CORPSE,
|
|
VEHICLE_DIE,
|
|
QUEEN_FRUSTRATED_SLAP,
|
|
CHARIOTS_OF_FIRE,
|
|
AI_PULL_SWITCH,
|
|
MONSTER_MELT,
|
|
MERC_HURT_IDLE_ANIM,
|
|
END_HURT_WALKING,
|
|
PASS_OBJECT,
|
|
DROP_ADJACENT_OBJECT,
|
|
READY_DUAL_PRONE,
|
|
AIM_DUAL_PRONE,
|
|
SHOOT_DUAL_PRONE,
|
|
END_DUAL_PRONE,
|
|
PRONE_SHOOT_DWEL_UNJAM,
|
|
PICK_LOCK,
|
|
OPEN_DOOR_CROUCHED,
|
|
BEGIN_OPENSTRUCT_CROUCHED,
|
|
CLOSE_DOOR_CROUCHED,
|
|
OPEN_STRUCT_CROUCHED,
|
|
END_OPEN_DOOR_CROUCHED,
|
|
END_OPENSTRUCT_CROUCHED,
|
|
END_OPEN_LOCKED_DOOR_CROUCHED,
|
|
END_OPENSTRUCT_LOCKED_CROUCHED,
|
|
DRUNK_IDLE,
|
|
CROWBAR_ATTACK,
|
|
CIV_COWER_HIT,
|
|
BLOODCAT_WALK_BACKWARDS,
|
|
MONSTER_WALK_BACKWARDS,
|
|
KID_SKIPPING,
|
|
ROBOT_BURST_SHOOT,
|
|
ATTACH_CAN_TO_STRING,
|
|
SWAT_BACKWARDS,
|
|
JUMP_OVER_BLOCKING_PERSON,
|
|
REFUEL_VEHICLE,
|
|
ROBOT_CAMERA_NOT_MOVING,
|
|
CRIPPLE_OPEN_DOOR,
|
|
CRIPPLE_CLOSE_DOOR,
|
|
CRIPPLE_END_OPEN_DOOR,
|
|
CRIPPLE_END_OPEN_LOCKED_DOOR,
|
|
LOCKPICK_CROUCHED,
|
|
THROW_ITEM_CROUCHED,
|
|
BIGGUY_STONE,
|
|
SHOOT_ROCKET_CROUCHED,
|
|
SWATTING_WK,
|
|
SWAT_BACKWARDS_WK,
|
|
SWAT_BACKWARDS_NOTHING,
|
|
THROW_GRENADE_STANCE,
|
|
LOB_GRENADE_STANCE,
|
|
ROLL_PRONE_R,
|
|
ROLL_PRONE_L,
|
|
JUMPUPWALL,
|
|
JUMPDOWNWALL,
|
|
JUMPWINDOWS,
|
|
THROW_KNIFE_SP_BM,
|
|
RUNNING_W_PISTOL,
|
|
SIDE_STEP_WEAPON_RDY,
|
|
SIDE_STEP_DUAL_RDY,
|
|
SIDE_STEP_CROUCH_RIFLE,
|
|
SIDE_STEP_CROUCH_PISTOL,
|
|
SIDE_STEP_CROUCH_DUAL,
|
|
WALKING_WEAPON_RDY,
|
|
WALKING_DUAL_RDY,
|
|
CROUCHEDMOVE_RIFLE_READY,
|
|
CROUCHEDMOVE_PISTOL_READY,
|
|
CROUCHEDMOVE_DUAL_READY,
|
|
START_AID_PRN,
|
|
GIVING_AID_PRN,
|
|
END_AID_PRN,
|
|
ADJACENT_GET_ITEM_CROUCHED,
|
|
STEAL_ITEM_CROUCHED,
|
|
BURST_DUAL_STAND,
|
|
BURST_DUAL_CROUCH,
|
|
BURST_DUAL_PRONE,
|
|
READY_ALTERNATIVE_STAND,
|
|
AIM_ALTERNATIVE_STAND,
|
|
SHOOT_ALTERNATIVE_STAND,
|
|
BURST_ALTERNATIVE_STAND,
|
|
LOW_SHOT_ALTERNATIVE_STAND,
|
|
LOW_BURST_ALTERNATIVE_STAND,
|
|
UNREADY_ALTERNATIVE_STAND,
|
|
UNJAM_ALTERNATIVE_STAND,
|
|
LOW_UNJAM_ALTERNATIVE_STAND,
|
|
WALKING_ALTERNATIVE_RDY,
|
|
SIDE_STEP_ALTERNATIVE_RDY,
|
|
START_COWER_CROUCHED,
|
|
END_COWER_CROUCHED,
|
|
START_COWER_PRONE,
|
|
COWERING_PRONE,
|
|
END_COWER_PRONE,
|
|
BIGMERC_IDLE_NECK2,
|
|
FOCUSED_PUNCH,
|
|
FOCUSED_STAB,
|
|
HTH_KICK,
|
|
FOCUSED_HTH_KICK,
|
|
LONG_JUMP,
|
|
CRYO_DEATH,
|
|
CRYO_DEATH_CROUCHED,
|
|
BAYONET_STAB_STANDING_VS_STANDING,
|
|
BAYONET_STAB_STANDING_VS_PRONE
|
|
);
|
|
|
|
/*****************************************
|
|
Animation states
|
|
******************************************/
|
|
LOGBT_ENUMDB_ADD("AnimationSurfaces", NUMANIMATIONSURFACETYPES,
|
|
RGMBASICWALKING,
|
|
RGMSTANDING,
|
|
RGMCROUCHING,
|
|
RGMSNEAKING,
|
|
RGMRUNNING,
|
|
RGMPRONE,
|
|
RGMSTANDAIM,
|
|
RGMHITHARD,
|
|
RGMHITSTAND,
|
|
RGMHITHARDBLOOD,
|
|
RGMCROUCHAIM,
|
|
RGMHITFALLBACK,
|
|
RGMROLLOVER,
|
|
RGMCLIMBROOF,
|
|
RGMFALL,
|
|
RGMFALLF,
|
|
RGMHITCROUCH,
|
|
RGMHITPRONE,
|
|
RGMHOPFENCE,
|
|
RGMPUNCH,
|
|
RGMNOTHING_STD,
|
|
RGMNOTHING_WALK,
|
|
RGMNOTHING_RUN,
|
|
RGMNOTHING_SWAT,
|
|
RGMNOTHING_CROUCH,
|
|
RGMHANDGUN_S_SHOT,
|
|
RGMHANDGUN_C_SHOT,
|
|
RGMHANDGUN_PRONE,
|
|
RGMDIE_JFK,
|
|
RGMOPEN,
|
|
RGMPICKUP,
|
|
RGMSTAB,
|
|
RGMSLICE,
|
|
RGMCSTAB,
|
|
RGMMEDIC,
|
|
RGMDODGE,
|
|
RGMSTANDDWALAIM,
|
|
RGMRAISE,
|
|
RGMTHROW,
|
|
RGMLOB,
|
|
RGMKICKDOOR,
|
|
RGMRHIT,
|
|
RGM_SQUISH,
|
|
RGM_LOOK,
|
|
RGM_PULL,
|
|
RGM_SPIT,
|
|
RGMWATER_R_WALK,
|
|
RGMWATER_R_STD,
|
|
RGMWATER_N_WALK,
|
|
RGMWATER_N_STD,
|
|
RGMWATER_DIE,
|
|
RGMWATER_N_AIM,
|
|
RGMWATER_R_AIM,
|
|
RGMWATER_DBLSHT,
|
|
RGMWATER_TRANS,
|
|
RGMDEEPWATER_TRED,
|
|
RGMDEEPWATER_SWIM,
|
|
RGMDEEPWATER_DIE,
|
|
RGMMCLIMB,
|
|
RGMHELIDROP,
|
|
RGMLOWKICK,
|
|
RGMNPUNCH,
|
|
RGMSPINKICK,
|
|
RGMSLEEP,
|
|
RGMSHOOT_LOW,
|
|
RGMCDBLSHOT,
|
|
RGMHURTSTANDINGN,
|
|
RGMHURTSTANDINGR,
|
|
RGMHURTWALKINGN,
|
|
RGMHURTWALKINGR,
|
|
RGMHURTTRANS,
|
|
RGMTHROWKNIFE,
|
|
RGMBREATHKNIFE,
|
|
RGMPISTOLBREATH,
|
|
RGMCOWER,
|
|
RGMROCKET,
|
|
RGMMORTAR,
|
|
RGMSIDESTEP,
|
|
RGMDBLBREATH,
|
|
RGMPUNCHLOW,
|
|
RGMPISTOLSHOOTLOW,
|
|
RGMWATERTHROW,
|
|
RGMRADIO,
|
|
RGMCRRADIO,
|
|
RGMBURN,
|
|
RGMDWPRONE,
|
|
RGMDRUNK,
|
|
RGMPISTOLDRUNK,
|
|
RGMCROWBAR,
|
|
RGMJUMPOVER,
|
|
RGMBAYONET_S_S,
|
|
RGMBAYONET_S_P,
|
|
BGMWALKING,
|
|
BGMSTANDING,
|
|
BGMCROUCHING,
|
|
BGMSNEAKING,
|
|
BGMRUNNING,
|
|
BGMPRONE,
|
|
BGMSTANDAIM,
|
|
BGMHITHARD,
|
|
BGMHITSTAND,
|
|
BGMHITHARDBLOOD,
|
|
BGMCROUCHAIM,
|
|
BGMHITFALLBACK,
|
|
BGMROLLOVER,
|
|
BGMCLIMBROOF,
|
|
BGMFALL,
|
|
BGMFALLF,
|
|
BGMHITCROUCH,
|
|
BGMHITPRONE,
|
|
BGMHOPFENCE,
|
|
BGMPUNCH,
|
|
BGMNOTHING_STD,
|
|
BGMNOTHING_WALK,
|
|
BGMNOTHING_RUN,
|
|
BGMNOTHING_SWAT,
|
|
BGMNOTHING_CROUCH,
|
|
BGMHANDGUN_S_SHOT,
|
|
BGMHANDGUN_C_SHOT,
|
|
BGMHANDGUN_PRONE,
|
|
BGMDIE_JFK,
|
|
BGMOPEN,
|
|
BGMPICKUP,
|
|
BGMSTAB,
|
|
BGMSLICE,
|
|
BGMCSTAB,
|
|
BGMMEDIC,
|
|
BGMDODGE,
|
|
BGMSTANDDWALAIM,
|
|
BGMRAISE,
|
|
BGMTHROW,
|
|
BGMLOB,
|
|
BGMKICKDOOR,
|
|
BGMRHIT,
|
|
BGMSTANDAIM2,
|
|
BGMFLEX,
|
|
BGMSTRECH,
|
|
BGMSHOEDUST,
|
|
BGMHEADTURN,
|
|
BGMWATER_R_WALK,
|
|
BGMWATER_R_STD,
|
|
BGMWATER_N_WALK,
|
|
BGMWATER_N_STD,
|
|
BGMWATER_DIE,
|
|
BGMWATER_N_AIM,
|
|
BGMWATER_R_AIM,
|
|
BGMWATER_DBLSHT,
|
|
BGMWATER_TRANS,
|
|
BGMDEEPWATER_TRED,
|
|
BGMDEEPWATER_SWIM,
|
|
BGMDEEPWATER_DIE,
|
|
BGMHELIDROP,
|
|
BGMSLEEP,
|
|
BGMSHOOT_LOW,
|
|
BGMTHREATENSTAND,
|
|
BGMCDBLSHOT,
|
|
BGMHURTSTANDINGN,
|
|
BGMHURTSTANDINGR,
|
|
BGMHURTWALKINGN,
|
|
BGMHURTWALKINGR,
|
|
BGMHURTTRANS,
|
|
BGMTHROWKNIFE,
|
|
BGMBREATHKNIFE,
|
|
BGMPISTOLBREATH,
|
|
BGMCOWER,
|
|
BGMRAISE2,
|
|
BGMROCKET,
|
|
BGMMORTAR,
|
|
BGMSIDESTEP,
|
|
BGMDBLBREATH,
|
|
BGMPUNCHLOW,
|
|
BGMPISTOLSHOOTLOW,
|
|
BGMWATERTHROW,
|
|
BGMWALK2,
|
|
BGMRUN2,
|
|
BGMIDLENECK,
|
|
BGMCROUCHTRANS,
|
|
BGMRADIO,
|
|
BGMCRRADIO,
|
|
BGMDWPRONE,
|
|
BGMDRUNK,
|
|
BGMPISTOLDRUNK,
|
|
BGMCROWBAR,
|
|
BGMJUMPOVER,
|
|
BGMBAYONET_S_S,
|
|
BGMBAYONET_S_P,
|
|
RGFWALKING,
|
|
RGFSTANDING,
|
|
RGFCROUCHING,
|
|
RGFSNEAKING,
|
|
RGFRUNNING,
|
|
RGFPRONE,
|
|
RGFSTANDAIM,
|
|
RGFHITHARD,
|
|
RGFHITSTAND,
|
|
RGFHITHARDBLOOD,
|
|
RGFCROUCHAIM,
|
|
RGFHITFALLBACK,
|
|
RGFROLLOVER,
|
|
RGFCLIMBROOF,
|
|
RGFFALL,
|
|
RGFFALLF,
|
|
RGFHITCROUCH,
|
|
RGFHITPRONE,
|
|
RGFHOPFENCE,
|
|
RGFPUNCH,
|
|
RGFNOTHING_STD,
|
|
RGFNOTHING_WALK,
|
|
RGFNOTHING_RUN,
|
|
RGFNOTHING_SWAT,
|
|
RGFNOTHING_CROUCH,
|
|
RGFHANDGUN_S_SHOT,
|
|
RGFHANDGUN_C_SHOT,
|
|
RGFHANDGUN_PRONE,
|
|
RGFDIE_JFK,
|
|
RGFOPEN,
|
|
RGFPICKUP,
|
|
RGFSTAB,
|
|
RGFSLICE,
|
|
RGFCSTAB,
|
|
RGFMEDIC,
|
|
RGFDODGE,
|
|
RGFSTANDDWALAIM,
|
|
RGFRAISE,
|
|
RGFTHROW,
|
|
RGFLOB,
|
|
RGFKICKDOOR,
|
|
RGFRHIT,
|
|
RGFCLEAN,
|
|
RGFKICKSN,
|
|
RGFALOOK,
|
|
RGFWIPE,
|
|
RGFWATER_R_WALK,
|
|
RGFWATER_R_STD,
|
|
RGFWATER_N_WALK,
|
|
RGFWATER_N_STD,
|
|
RGFWATER_DIE,
|
|
RGFWATER_N_AIM,
|
|
RGFWATER_R_AIM,
|
|
RGFWATER_DBLSHT,
|
|
RGFWATER_TRANS,
|
|
RGFDEEPWATER_TRED,
|
|
RGFDEEPWATER_SWIM,
|
|
RGFDEEPWATER_DIE,
|
|
RGFHELIDROP,
|
|
RGFSLEEP,
|
|
RGFSHOOT_LOW,
|
|
RGFCDBLSHOT,
|
|
RGFHURTSTANDINGN,
|
|
RGFHURTSTANDINGR,
|
|
RGFHURTWALKINGN,
|
|
RGFHURTWALKINGR,
|
|
RGFHURTTRANS,
|
|
RGFTHROWKNIFE,
|
|
RGFBREATHKNIFE,
|
|
RGFPISTOLBREATH,
|
|
RGFCOWER,
|
|
RGFROCKET,
|
|
RGFMORTAR,
|
|
RGFSIDESTEP,
|
|
RGFDBLBREATH,
|
|
RGFPUNCHLOW,
|
|
RGFPISTOLSHOOTLOW,
|
|
RGFWATERTHROW,
|
|
RGFRADIO,
|
|
RGFCRRADIO,
|
|
RGFSLAP,
|
|
RGFDWPRONE,
|
|
RGFDRUNK,
|
|
RGFPISTOLDRUNK,
|
|
RGFCROWBAR,
|
|
RGFJUMPOVER,
|
|
RGFBAYONET_S_S,
|
|
RGFBAYONET_S_P,
|
|
CRYO_EXPLODE,
|
|
CRYO_EXPLODE_CROUCHED,
|
|
AFMONSTERSTANDING,
|
|
AFMONSTERWALKING,
|
|
AFMONSTERATTACK,
|
|
AFMONSTERCLOSEATTACK,
|
|
AFMONSTERSPITATTACK,
|
|
AFMONSTEREATING,
|
|
AFMONSTERDIE,
|
|
AFMUP,
|
|
AFMJUMP,
|
|
AFMMELT,
|
|
LVBREATH,
|
|
LVDIE,
|
|
LVWALK,
|
|
IBREATH,
|
|
IWALK,
|
|
IDIE,
|
|
IEAT,
|
|
IATTACK,
|
|
QUEENMONSTERSTANDING,
|
|
QUEENMONSTERREADY,
|
|
QUEENMONSTERSPIT_SW,
|
|
QUEENMONSTERSPIT_E,
|
|
QUEENMONSTERSPIT_NE,
|
|
QUEENMONSTERSPIT_S,
|
|
QUEENMONSTERSPIT_SE,
|
|
QUEENMONSTERDEATH,
|
|
QUEENMONSTERSWIPE,
|
|
FATMANSTANDING,
|
|
FATMANWALKING,
|
|
FATMANRUNNING,
|
|
FATMANDIE,
|
|
FATMANASS,
|
|
FATMANACT,
|
|
FATMANCOWER,
|
|
FATMANDIE2,
|
|
FATMANCOWERHIT,
|
|
MANCIVSTANDING,
|
|
MANCIVWALKING,
|
|
MANCIVRUNNING,
|
|
MANCIVDIE,
|
|
MANCIVACT,
|
|
MANCIVCOWER,
|
|
MANCIVDIE2,
|
|
MANCIVSMACKED,
|
|
MANCIVPUNCH,
|
|
MANCIVCOWERHIT,
|
|
MINICIVSTANDING,
|
|
MINICIVWALKING,
|
|
MINICIVRUNNING,
|
|
MINICIVDIE,
|
|
MINISTOCKING,
|
|
MINIACT,
|
|
MINICOWER,
|
|
MINIDIE2,
|
|
MINICOWERHIT,
|
|
DRESSCIVSTANDING,
|
|
DRESSCIVWALKING,
|
|
DRESSCIVRUNNING,
|
|
DRESSCIVDIE,
|
|
DRESSCIVACT,
|
|
DRESSCIVCOWER,
|
|
DRESSCIVDIE2,
|
|
DRESSCIVCOWERHIT,
|
|
HATKIDCIVSTANDING,
|
|
HATKIDCIVWALKING,
|
|
HATKIDCIVRUNNING,
|
|
HATKIDCIVDIE,
|
|
HATKIDCIVJFK,
|
|
HATKIDCIVYOYO,
|
|
HATKIDCIVACT,
|
|
HATKIDCIVCOWER,
|
|
HATKIDCIVDIE2,
|
|
HATKIDCIVCOWERHIT,
|
|
HATKIDCIVSKIP,
|
|
KIDCIVSTANDING,
|
|
KIDCIVWALKING,
|
|
KIDCIVRUNNING,
|
|
KIDCIVDIE,
|
|
KIDCIVJFK,
|
|
KIDCIVARMPIT,
|
|
KIDCIVACT,
|
|
KIDCIVCOWER,
|
|
KIDCIVDIE2,
|
|
KIDCIVCOWERHIT,
|
|
KIDCIVSKIP,
|
|
CRIPCIVSTANDING,
|
|
CRIPCIVWALKING,
|
|
CRIPCIVRUNNING,
|
|
CRIPCIVBEG,
|
|
CRIPCIVDIE,
|
|
CRIPCIVDIE2,
|
|
CRIPCIVKICK,
|
|
COWSTANDING,
|
|
COWWALKING,
|
|
COWDIE,
|
|
COWEAT,
|
|
CROWWALKING,
|
|
CROWFLYING,
|
|
CROWEATING,
|
|
CROWDYING,
|
|
CATBREATH,
|
|
CATWALK,
|
|
CATRUN,
|
|
CATREADY,
|
|
CATHIT,
|
|
CATDIE,
|
|
CATSWIPE,
|
|
CATBITE,
|
|
ROBOTNWBREATH,
|
|
ROBOTNWWALK,
|
|
ROBOTNWHIT,
|
|
ROBOTNWDIE,
|
|
ROBOTNWSHOOT,
|
|
HUMVEE_BASIC,
|
|
HUMVEE_DIE,
|
|
TANKNW_READY,
|
|
TANKNW_SHOOT,
|
|
TANKNW_DIE,
|
|
TANKNE_READY,
|
|
TANKNE_SHOOT,
|
|
TANKNE_DIE,
|
|
ELDORADO_BASIC,
|
|
ELDORADO_DIE,
|
|
ICECREAMTRUCK_BASIC,
|
|
ICECREAMTRUCK_DIE,
|
|
JEEP_BASIC,
|
|
JEEP_DIE,
|
|
ARMED_CAR_READY,
|
|
ARMED_CAR_SHOOT,
|
|
ARMED_CAR_DIE,
|
|
BODYEXPLODE,
|
|
RGMCRTHROW,
|
|
BGMCRTHROW,
|
|
RGFCRTHROW,
|
|
BGMWITHSTONE,
|
|
RGMCRROCKET,
|
|
BGMCRROCKET,
|
|
RGFCRROCKET,
|
|
BGMSWKNIFE,
|
|
RGFSWKNIFE,
|
|
RGMSWKNIFE,
|
|
BGMSTHRG,
|
|
RGFSTHRG,
|
|
RGMSTHRG,
|
|
BGMSLOBG,
|
|
RGFSLOBG,
|
|
RGMSLOBG,
|
|
RGMROLL_PR,
|
|
BGMROLL_PR,
|
|
RGFROLL_PR,
|
|
RGMWALLJUMP,
|
|
BGMWALLJUMP,
|
|
RGFWALLJUMP,
|
|
RGMJUMPWINDOWS,
|
|
BGMJUMPWINDOWS,
|
|
RGFJUMPWINDOWS,
|
|
RGMUSEREMOTE,
|
|
BGMUSEREMOTE,
|
|
RGFUSEREMOTE,
|
|
BGMTHROWKNIFE2,
|
|
RGMPISTOL_RUN,
|
|
BGMPISTOL_RUN,
|
|
RGFPISTOL_RUN,
|
|
RGMSIDESTEP_P_RDY,
|
|
RGMSIDESTEP_R_RDY,
|
|
RGMSIDESTEP_D_RDY,
|
|
BGMSIDESTEP_P_RDY,
|
|
BGMSIDESTEP_R_RDY,
|
|
BGMSIDESTEP_R_RDY2,
|
|
BGMSIDESTEP_D_RDY,
|
|
RGFSIDESTEP_P_RDY,
|
|
RGFSIDESTEP_R_RDY,
|
|
RGFSIDESTEP_D_RDY,
|
|
RGMSIDESTEP_CROUCH_R_RDY,
|
|
RGMSIDESTEP_CROUCH_P_RDY,
|
|
RGMSIDESTEP_CROUCH_D_RDY,
|
|
BGMSIDESTEP_CROUCH_R_RDY,
|
|
BGMSIDESTEP_CROUCH_P_RDY,
|
|
BGMSIDESTEP_CROUCH_D_RDY,
|
|
RGFSIDESTEP_CROUCH_R_RDY,
|
|
RGFSIDESTEP_CROUCH_P_RDY,
|
|
RGFSIDESTEP_CROUCH_D_RDY,
|
|
RGMWALK_P_RDY,
|
|
RGMWALK_R_RDY,
|
|
RGMWALK_D_RDY,
|
|
RGMCROUCH_R_RDY,
|
|
RGMCROUCH_P_RDY,
|
|
RGMCROUCH_D_RDY,
|
|
BGMWALK_P_RDY,
|
|
BGMWALK_R_RDY,
|
|
BGMWALK_R_RDY2,
|
|
BGMWALK_D_RDY,
|
|
BGMCROUCH_R_RDY,
|
|
BGMCROUCH_P_RDY,
|
|
BGMCROUCH_D_RDY,
|
|
RGFWALK_P_RDY,
|
|
RGFWALK_R_RDY,
|
|
RGFWALK_D_RDY,
|
|
RGFCROUCH_R_RDY,
|
|
RGFCROUCH_P_RDY,
|
|
RGFCROUCH_D_RDY,
|
|
RGMMEDICPRN,
|
|
BGMMEDICPRN,
|
|
RGFMEDICPRN,
|
|
RGM_HIP_AIM,
|
|
RGM_HIP_LOW,
|
|
BGM_HIP_AIM,
|
|
RGF_HIP_AIM,
|
|
RGM_WATER_HIP_AIM,
|
|
BGM_WATER_HIP_AIM,
|
|
RGF_WATER_HIP_AIM,
|
|
RGM_COWER_PRONE,
|
|
BGM_COWER_PRONE,
|
|
RGF_COWER_PRONE,
|
|
BGMIDLENECK2,
|
|
BGMHIPAIMALT,
|
|
BGMSRAIMALT,
|
|
RGM_PFSHOT_AIM,
|
|
BGM_PFSHOT_AIM,
|
|
RGF_PFSHOT_AIM
|
|
);
|
|
|
|
};
|
|
|
|
}
|