Jump to content


Photo

TDM Combat


  • Please log in to reply
188 replies to this topic

#176 Springheel

Springheel

    Creative Director (retired)

  • Admin
  • 37756 posts

Posted 25 June 2014 - 08:24 AM

It's line 120 in tdm_melee.def
  • SirGen likes this
TDM Missions:   A Score to Settle   *   A Reputation to Uphold   *   A New Job   *    A Matter of Hours
 
Video Series:   Springheel's Modules   *   Speedbuild Challenge   *   New Mappers Workshop  *   Building Traps

#177 SirGen

SirGen

    Member

  • Member
  • PipPip
  • 326 posts

Posted 25 June 2014 - 11:35 AM

It's line 120 in tdm_melee.def

Thank you very much!

Alberic is my sparring partner.

Whaddya mean, smiley faces aren't punctuation :huh:


#178 SirGen

SirGen

    Member

  • Member
  • PipPip
  • 326 posts

Posted 16 December 2014 - 12:15 AM

I've been adjusting AI attack speeds, blocking speeds, damage. etc. to get the right settings for my play style and as I've done this I've noticed that enemy archers/bowman will kill their allies who stand between me and them. I don't know much about programming, but I think that it would be nice to make it so the AI will not fire an arrow if their ally is in their line of fire. If it's not too much trouble.
  • RPGista likes this

Alberic is my sparring partner.

Whaddya mean, smiley faces aren't punctuation :huh:


#179 Xarg

Xarg

    Advanced Member

  • Member
  • PipPipPip
  • 1337 posts

Posted 16 December 2014 - 01:08 AM

Or they could start wearing wooden boards under their shirts, like the ever so popular tax collectors of olde.
  • SteveL likes this

Intel Sandy Bridge i7 2600K @ 3.4ghz stock clocks
8gb Kingston 1600mhz CL8 XMP RAM stock frequency
Sapphire Radeon HD7870 2GB FLeX GHz Edition @ stock @ 1920x1080

 


#180 SirGen

SirGen

    Member

  • Member
  • PipPip
  • 326 posts

Posted 16 December 2014 - 01:24 AM

Haha, yeah. Wooden boards all around! let's make arrows obsolete :P

Alberic is my sparring partner.

Whaddya mean, smiley faces aren't punctuation :huh:


#181 Xarg

Xarg

    Advanced Member

  • Member
  • PipPipPip
  • 1337 posts

Posted 16 December 2014 - 05:36 AM

Heh, I think anyone using a wooden board to stop an arrow getting them in the face is going to have bigger issues than the arrows
  • Tels and SirGen like this

Intel Sandy Bridge i7 2600K @ 3.4ghz stock clocks
8gb Kingston 1600mhz CL8 XMP RAM stock frequency
Sapphire Radeon HD7870 2GB FLeX GHz Edition @ stock @ 1920x1080

 


#182 MirceaKitsune

MirceaKitsune

    Advanced Member

  • Member
  • PipPipPip
  • 736 posts

Posted 02 January 2015 - 10:51 AM

The existing combat system and features are very good! My only real complaint is that there are too few weapons with little variations, but I started another thread for this discussion. Other than that, it seems to be quite difficult in general: Even on the easiest setting you have a hard time defeating a guard in a sword duel, and the arena in the tutorial map is unbeatable without using some trickery (involving arrows and flash bombs).

 

Overall I feel that combat is not getting quite as much attention as it could be, just because TDM is stealth based so combat is considered of lesser importance. I'd personally like it if TDM continued to maintain focus and encouragement on stealth, while also considering combat a very important system that needs as much care and polishing. After all, this genre of game is often based on choice and the player's ability to do what they want and interact with everything, while some missions could additionally offer bosses which will force the player to fight or at least silently assassinate someone.


Edited by MirceaKitsune, 02 January 2015 - 10:51 AM.


#183 RPGista

RPGista

    Advanced Member

  • Member
  • PipPipPip
  • 1665 posts

Posted 03 January 2015 - 09:46 AM

There are certain missions where you have to assassinate some bad guy, and even ones with bosses, I could tell you which ones but i find it is much better to be surprised by the mission in game. So, try lots of them.

I believe the original coder that put the combat the combat system in place is no longer active, thats probably why it hasnt been experimented upon as much. Also, it is a pretty good working base. You could think of ways of adding little bits of flavour, like heavy blows that cause a bit of stunning even when blocked, or more distinctive personalities for guards, like someone tht is really reckless and agreasive as opposed to someone that is cold and accurate, but the basics of it works really well. The combat system is what brought me to TDM in the first place. I had played Mount and Blade and was looking for a game with more depth that still had a complex combat system. I was amazed when i saw some melee videos on youtube showing off the fighting in tdm.

Anyways, there has been much discussion and suggestions for it through the ages, but unfortunately maby of the most needed enhancements to combat would need a mixture of AI work, which the team is willing to take, and animation work, which is not something anyone in the team can provide at this point, so untill more animators come along, it will be hard to talk about bigger changes.

Ps: by bigger changes i mean the way ai fight and react to the player, by strafing, taunting and the like, NOT the directional mechanics of dueling which is the core of the system.

#184 RPGista

RPGista

    Advanced Member

  • Member
  • PipPipPip
  • 1665 posts

Posted 03 January 2015 - 09:57 AM

To Sirgen - Could you post by any chance those tweaks to AI's and player's stats you were experimenting with? You could put the stuff together on a pk4 and call it " Sirgen's enhanced AI duelling skills mod ". ;) I would be very interested in trying the changes. Specially if you restored one-hit fatal blows to unprotected head and chest, and increased levels of AI's reaction time and player's animation speed.

Edited by RPGista, 03 January 2015 - 09:59 AM.


#185 SirGen

SirGen

    Member

  • Member
  • PipPip
  • 326 posts

Posted 03 January 2015 - 11:12 AM

Hey RPGista!

 

I am not very computer savvy, so I don't know how to put my changes on a pk4. However, it is very easy to change the settings yourself if you have 7zip or winrar to unzip the def folder. Once you've unzipped the def folder there are many sub def folders pertaining to all sorts of gameplay. You probably already know all this, but there might be some who don't who would also like to know. the first thing I did across the board is change tdm_ai_melee_sets.def

 

I changed all stats across the board for sake of ease, so there is no difference between elites and untrained. One of my favorite changes was removing the wind-up pause for enemy attacks. Here's my current build for tdm_ai_melee_sets.def.

 

Spoiler
 
I have also made changes to Darkmod.cfg,tdm_player_thief.def,tdm_weapon_arrow.def and tdm_weapon_shortsword.def.
 
I have three builds. One for combat (I die in one hit, I kill everything in one hit, no fall damage and mad "wall scaling skills"  (mantling) I have a stealth build where the enemies attack speed and block speed animations are so fast that I have zero chance of winning in a fight. I also have a Mid build where sneaking is the best option, but I can still kill 1 guard fairly easily, 2 is a very hard fight, and once in a while I'm able to defeat 3 at a time. I am willing to post all my changes here if you'd like.

  • RPGista likes this

Alberic is my sparring partner.

Whaddya mean, smiley faces aren't punctuation :huh:


#186 SirGen

SirGen

    Member

  • Member
  • PipPip
  • 326 posts

Posted 03 January 2015 - 06:01 PM

Here is my "Combat build"
 
Darkmod.cfg  I think the only lines that I modified are these: seta pm_mantle_height "9"
seta pm_mantle_reach "1.5" I did this to create the illusion of being a master at scaling walls. It does break some missions though by making infiltration too easy.
 
Spoiler
 
tdm_ai_melee_sets.def
 
The line: "melee_damage_mod" "9" is how I made it so that the enemy kills me in one hit.
 
I modified these lines to make the enemy attack a little bit faster and to block much faster:// default (fast) attack and parry anim speeds:
"anim_rate_melee_attack_rl" "1.2"
"anim_rate_melee_attack_lr" "1.15"
"anim_rate_melee_attack_over" "1.1"
"anim_rate_melee_attack_thrust" "1.35"
 
"anim_rate_melee_parry_rl" "2"
"anim_rate_melee_parry_lr" "2"
"anim_rate_melee_parry_over" "2"
"anim_rate_melee_parry_thrust" "2"
 
} There are 3 different sets of lines to adjust the ai's attack speeds, but only one for blocking speed.
 
Spoiler
 * Represents different levels of melee skill by sets of spawnargs
 * Each level may also be different at different player difficulty levels
 */
 
entityDef atdm:ai_melee_set_base
{
"editor_usage" "Base class for melee difficulty sets (Do not use)"
"editor_displayFolder" "AI/Internal"
 
// Default settings:
 
// Health offset added to the health in the AI's def file
// (may be positive or negative)
"health_offset" "0"
 
// fool me once, shame on you, fool me twice...
// third attack in a row in same direction is anticipated
"melee_num_rep_attacks" "3"
// attacks that are at least this far apart in time are not considered repeated
"melee_rep_attack_time" "10000" // 10 sec
 
// test: always able to parry if not attacking, use parry delay instead
// This variable was probably a bad idea, maybe leave it at zero
"melee_parry_recovery_min" "0"
"melee_parry_recovery_max" "0"
 
// amount of time the back swing is held
"melee_hold_time_min" "0"
"melee_hold_time_max" "0"
 
// max time they will hold a parry, waiting for the enemy to attack
"melee_parry_hold_min" "3000"
"melee_parry_hold_max" "5000"
 
// time they must wait between attacks
// TODO: Maybe decrease these a bit for hardest setting
"melee_attack_recovery_min" "0"
"melee_attack_recovery_max" "1000"
// time they must wait between attacks if they just got hit or parried
"melee_attack_long_recovery_min" "0"
"melee_attack_long_recovery_max" "1000"
 
// time they must wait to attack after they parry (shorter than attack_recovery)
"melee_riposte_recovery_min" "0"
"melee_riposte_recovery_max" "0"
// reaction time between seeing an attack coming and putting up a parry (critical to difficulty)
"melee_pre_parry_delay_min" "0"
"melee_pre_parry_delay_max" "0"
// repeated attacks along the same direction are anticipated and
// met with faster response(still possible to hit with fast parry-riposte)
"melee_repeated_pre_parry_delay_min" "0"
"melee_repeated_pre_parry_delay_max" "0"
 
// reaction time to the cessation of an attack (they keep holding the parry up for this time)
"melee_post_parry_delay_min" "0"
"melee_post_parry_delay_max" "0"
"melee_repeated_post_parry_delay_min" "0"
"melee_repeated_post_parry_delay_max" "0"
 
// Percent chance to counterattack into an enemy attack instead of parrying
// Setting this higher means more simultaneous hits
"melee_chance_to_counter" "0"
 
// default (fast) attack and parry anim speeds:
"anim_rate_melee_attack_rl" "1.2"
"anim_rate_melee_attack_lr" "1.15"
"anim_rate_melee_attack_over" "1.1"
"anim_rate_melee_attack_thrust" "1.35"
 
"anim_rate_melee_parry_rl" "2"
"anim_rate_melee_parry_lr" "2"
"anim_rate_melee_parry_over" "2"
"anim_rate_melee_parry_thrust" "2"
}
 
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//                Combat Difficulty = Normal
// *************************************************************
 
entityDef atdm:ai_melee_set_novice_normal
{
"editor_usage" "Melee difficulty set for AI skill level: novice."
"editor_displayFolder" "AI/Internal"
 
"inherit" "atdm:ai_melee_set_base"
 
// normal difficulty health offset:
"health_offset" "20" // "-50" made things far too easy
 
// hold back the attacks for this long
"melee_hold_time_min" "0"
"melee_hold_time_max" "0"
 
 
"melee_pre_parry_delay_min" "0"
"melee_pre_parry_delay_max" "0"
 
"melee_repeated_pre_parry_delay_min" "0"
"melee_repeated_pre_parry_delay_max" "0"
 
"melee_post_parry_delay_min" "0"
// sometimes they hesitate on their riposte
"melee_post_parry_delay_max" "0"
 
// reduced damage (still scales with weapon):
// 5 hits to kill player w/ longsword
"melee_damage_mod" "9" 
 
// clumsy slow attacks instead of long melee hold time?
// tweak melee animation speeds here for gameplay
"anim_rate_melee_attack_rl" "1.2"
"anim_rate_melee_attack_lr" "1.15"
"anim_rate_melee_attack_over" "1.1"
// this one doesn't look right any slower
"anim_rate_melee_attack_thrust" "1.35"
}
 
 
// trained difficulty (WIP!)
entityDef atdm:ai_melee_set_trained_normal
{
"inherit" "atdm:ai_melee_set_skilled_normal"
 
// normal health offset:
"health_offset" "20" // "-50" made things far too easy
 
// novice level settings:
// hold back the attacks for this long
"melee_hold_time_min" "0"
"melee_hold_time_max" "0"
 
// parry response times
// split the difference between novice and skilled?
"melee_pre_parry_delay_min" "0"
"melee_pre_parry_delay_max" "0"
 
"melee_repeated_pre_parry_delay_min" "0"
"melee_repeated_pre_parry_delay_max" "0"
 
// reduced damage (still scales with weapon):
// 5 hits to kill player w/ longsword
"melee_damage_mod" "9"
 
// tweak melee animation speeds here for gameplay
"anim_rate_melee_attack_rl" "1.2"
"anim_rate_melee_attack_lr" "1.15"
"anim_rate_melee_attack_over" "1.1"
"anim_rate_melee_attack_thrust" "1.35" 
}
 
entityDef atdm:ai_melee_set_skilled_normal
{
"inherit" "atdm:ai_melee_set_base"
 
// normal health offset:
"health_offset" "20" // "-50" made things far too easy
 
// time over which they hold the backswing
"melee_hold_time_min" "0"
"melee_hold_time_max" "0"
 
        // reaction time between seeing an attack coming and putting up a parry (critical to difficulty)
"melee_pre_parry_delay_min" "0"
"melee_pre_parry_delay_max" "0"
 
// max time they will hold a parry, waiting for the enemy to attack
"melee_parry_hold_min" "3000"
"melee_parry_hold_max" "5000"
 
// time they must wait between attacks
// TODO: Maybe decrease these a bit for hardest setting
"melee_attack_recovery_min" "0"
"melee_attack_recovery_max" "1000"
// time they must wait between attacks if they just got hit or parried
"melee_attack_long_recovery_min" "0"
"melee_attack_long_recovery_max" "1000"
 
// time they must wait to attack after they parry (shorter than attack_recovery)
"melee_riposte_recovery_min" "0"
"melee_riposte_recovery_max" "0"
 
// repeated attacks along the same direction are anticipated and
// met with faster response(still possible to hit with fast parry-riposte)
"melee_repeated_pre_parry_delay_min" "0"
"melee_repeated_pre_parry_delay_max" "0"
 
// reaction time to the cessation of an attack (they keep holding the parry up for this time)
"melee_post_parry_delay_min" "0"
"melee_post_parry_delay_max" "0"
"melee_repeated_post_parry_delay_min" "0"
"melee_repeated_post_parry_delay_max" "0"
 
// Percent chance to counterattack into an enemy attack instead of parrying
// Setting this higher means more simultaneous hits
"melee_chance_to_counter" "0"
 
 
"melee_damage_mod"      "9"
}
 
 
 
 
 
 
 
 
 
 
 
entityDef atdm:ai_melee_set_novice_hard
{
"inherit" "atdm:ai_melee_set_novice_normal"
 
// hard difficulty health offset:
"health_offset" "20"
 
// 4 hits to kill w/ longsword
"melee_damage_mod" "9"
}
 
entityDef atdm:ai_melee_set_trained_hard
{
"inherit" "atdm:ai_melee_set_trained_normal"
 
// hard difficulty health offset:
"health_offset" "20"
 
"melee_damage_mod" "9"
}
 
 
 
entityDef atdm:ai_melee_set_skilled_hard
{
"inherit" "atdm:ai_melee_set_skilled_normal"
 
// hard difficulty health offset:
"health_offset" "20"
 
"melee_damage_mod" "9"
}
 
 
 
 
 
entityDef atdm:ai_melee_set_novice_expert
{
"inherit" "atdm:ai_melee_set_novice_hard"
 
// expert difficulty health offset:
"health_offset" "20"
 
// 3 hits to kill w/ longsword
"melee_damage_mod" "9"
}
 
 
 
 
entityDef atdm:ai_melee_set_trained_expert
{
"inherit" "atdm:ai_melee_set_trained_hard"
 
// expert difficulty health offset:
"health_offset" "20"
 
"melee_damage_mod" "9"
}
 
 
 
entityDef atdm:ai_melee_set_skilled_expert
{
"inherit" "atdm:ai_melee_set_skilled_hard"
 
// expert difficulty health offset:
"health_offset" "20"
 
"melee_damage_mod" "9"
}
 
 
 
 
 
 
// ============= KNIFE FIGHTING SETS ==============
// Same as sword sets, but they can't block,
// so they should attack more frequently
 
entityDef atdm:ai_melee_set_knife_novice_normal
{
"inherit" "atdm:ai_melee_set_novice_normal"
 
        // amount of time the back swing is held
"melee_hold_time_min" "0"
"melee_hold_time_max" "0"
 
"melee_attack_recovery_min" "0"
"melee_attack_recovery_max" "1000"
 
"melee_attack_long_recovery_min" "0"
"melee_attack_long_recovery_max" "1000"
}
 
entityDef atdm:ai_melee_set_knife_novice_hard
{
"inherit" "atdm:ai_melee_set_novice_hard"
 
        // amount of time the back swing is held
"melee_hold_time_min" "0"
"melee_hold_time_max" "0"
 
"melee_attack_recovery_min" "0"
"melee_attack_recovery_max" "1000"
 
"melee_attack_long_recovery_min" "0"
"melee_attack_long_recovery_max" "1000"
}
 
entityDef atdm:ai_melee_set_knife_novice_expert
{
"inherit" "atdm:ai_melee_set_novice_expert"
 
        // amount of time the back swing is held
"melee_hold_time_min" "0"
"melee_hold_time_max" "0"
 
"melee_attack_recovery_min" "0"
"melee_attack_recovery_max" "1000"
 
"melee_attack_long_recovery_min" "0"
"melee_attack_long_recovery_max" "1000"
}
 
entityDef atdm:ai_melee_set_knife_trained_normal
{
"inherit" "atdm:ai_melee_set_trained_normal"
 
        // amount of time the back swing is held
"melee_hold_time_min" "0"
"melee_hold_time_max" "0"
 
"melee_attack_recovery_min" "0"
"melee_attack_recovery_max" "1000"
 
"melee_attack_long_recovery_min" "0"
"melee_attack_long_recovery_max" "1000"
}
 
entityDef atdm:ai_melee_set_knife_trained_hard
{
"inherit" "atdm:ai_melee_set_trained_hard"
 
        // amount of time the back swing is held
"melee_hold_time_min" "0"
"melee_hold_time_max" "0"
 
"melee_attack_recovery_min" "0"
"melee_attack_recovery_max" "1000"
 
"melee_attack_long_recovery_min" "0"
"melee_attack_long_recovery_max" "1000"
}
 
entityDef atdm:ai_melee_set_knife_trained_expert
{
"inherit" "atdm:ai_melee_set_trained_expert"
 
        // amount of time the back swing is held
"melee_hold_time_min" "0"
"melee_hold_time_max" "0"
 
"melee_attack_recovery_min" "0"
"melee_attack_recovery_max" "1000"
 
"melee_attack_long_recovery_min" "0"
"melee_attack_long_recovery_max" "1000"
}
 
entityDef atdm:ai_melee_set_knife_skilled_normal
{
"inherit" "atdm:ai_melee_set_skilled_normal"
 
        // amount of time the back swing is held
"melee_hold_time_min" "0"
"melee_hold_time_max" "0"
 
"melee_attack_recovery_min" "0"
"melee_attack_recovery_max" "1000"
 
"melee_attack_long_recovery_min" "0"
"melee_attack_long_recovery_max" "1000"
}
 
entityDef atdm:ai_melee_set_knife_skilled_hard
{
"inherit" "atdm:ai_melee_set_skilled_hard"
 
        // amount of time the back swing is held
"melee_hold_time_min" "0"
"melee_hold_time_max" "0"
 
"melee_attack_recovery_min" "0"
"melee_attack_recovery_max" "1000"
 
"melee_attack_long_recovery_min" "0"
"melee_attack_long_recovery_max" "1000"
}
 
entityDef atdm:ai_melee_set_knife_skilled_expert
{
"inherit" "atdm:ai_melee_set_skilled_expert"
 
"melee_attack_recovery_min" "0"
"melee_attack_recovery_max" "1000"
 
"melee_attack_long_recovery_min" "0"
"melee_attack_long_recovery_max" "1000"
}
 
tdm_player_thief.def
 
I modified these values to make it so there is no fall damage: "editor_float collision_damage_threshold_min" "Collision damage below this value is ignored."
"collision_damage_threshold_min" "998"
 
"editor_float collision_damage_threshold_hard" "Collision damage above this value is considered 'hard'."
"collision_damage_threshold_hard" "999"
 
Spoiler
/***********************************************************************
 
TDM single player model and its related entities.
 
***********************************************************************/
 
model model_player_thief {
 
//offset ( 0 0 1 )
 
mesh models/md5/chars/thief/tdm_ai_thief.md5mesh
 
    channel torso ( *Spine1 )
    channel legs ( *origin - *Spine )
 
anim af_pose models/md5/chars/thief/af_pose.md5anim
anim ik_pose models/md5/chars/thief/af_pose.md5anim
anim initial models/md5/chars/thief/af_pose.md5anim
 
anim idle models/md5/chars/thief/idle.md5anim
 
anim crouch_down models/md5/chars/thief/crouch_down.md5anim
 
anim crouch models/md5/chars/thief/crouch_idle.md5anim
anim crouch_up     models/md5/chars/thief/crouch_up.md5anim
 
 
anim crouch_walk models/md5/chars/thief/crouch.md5anim
anim crouch_walk_backwards models/md5/chars/thief/crouch_backwards.md5anim
anim walk models/md5/chars/thief/walk.md5anim
anim walk_backwards models/md5/chars/thief/walk_backwards.md5anim
anim walk_strafe_left models/md5/chars/thief/walk_strafe_left.md5anim
anim walk_strafe_right models/md5/chars/thief/walk_strafe_right.md5anim
 
        anim run_forward models/md5/chars/thief/run.md5anim
 
 
anim run_backwards models/md5/chars/thief/run_backwards.md5anim
{
prevent_idle_override
}
anim run_strafe_left models/md5/chars/thief/run_strafe_left.md5anim
anim run_strafe_right models/md5/chars/thief/run_strafe_right.md5anim
 
/**
* DarkMod Creep animations:
**/
 
anim creep_forward models/md5/chars/thief/creep_forward.md5anim
anim creep_backwards models/md5/chars/thief/creep_backwards.md5anim
anim creep_strafe_left models/md5/chars/thief/creep_strafe_left.md5anim
anim creep_strafe_right models/md5/chars/thief/creep_strafe_right.md5anim
 
/**
* DarkMod Crouch Run and Crouch Creep Animations
**/
 
anim crouch_creep models/md5/chars/thief/crouch_creep.md5anim
anim crouch_creep_backwards models/md5/chars/thief/crouch_creep_backwards.md5anim
anim crouch_run models/md5/chars/thief/crouch.md5anim
anim crouch_run_backwards models/md5/chars/thief/crouch_backwards.md5anim
 
/**
* DarkMod Lean Animations
**/
 
    anim lean_forward           models/md5/chars/thief/lean_f.md5anim
 
    anim lean_right             models/md5/chars/thief/lean_r.md5anim
    anim lean_left              models/md5/chars/thief/lean_l.md5anim
 
/*************************************************************/
 
    anim jump models/md5/chars/thief/jump.md5anim {
prevent_idle_override
 
 
 
}
anim run_jump models/md5/chars/thief/jump.md5anim {
prevent_idle_override
 
}
    anim soft_land models/md5/chars/thief/soft_land.md5anim {
prevent_idle_override
}
anim hard_land models/md5/chars/thief/hard_land.md5anim {
prevent_idle_override
}
anim fall models/md5/chars/thief/hard_land.md5anim {
prevent_idle_override
}
anim turn_left models/md5/chars/thief/turn_left.md5anim {
prevent_idle_override
}
anim turn_right models/md5/chars/thief/turn_right.md5anim  {
prevent_idle_override
}
/** anim pain models/md5/chars/thief/painchest.md5anim {
prevent_idle_override
}
anim pain_head models/md5/chars/thief/painhead.md5anim {
prevent_idle_override
}
 
anim pain_right_arm models/md5/chars/thief/painrightarm.md5anim {
prevent_idle_override
}
 
anim pain_left_arm models/md5/chars/thief/painleftarm.md5anim {
prevent_idle_override
}
 
anim pain_chest models/md5/chars/thief/painchest.md5anim {
prevent_idle_override
} **/
}
 
/***********************************************************************
 
 atdm:player_base
 
***********************************************************************/
 
entityDef atdm:player_base {
"inherit" "atdm:entity_base"
"spawnclass" "idPlayer"
"scriptobject" "player"
"ragdoll" "guard_base"
 
"editor_displayFolder" "Internal"
"editor_usage" "Base class for the player, defining default values."
 
"hud" "guis/tdm_hud.gui"
"mphud" "guis/mphud.gui"
// Tels: We do not have a crosshair or a talk cursor
// "cursor" "guis/cursor.gui"
 
"editor_float blink_min" "Minimum time between eye blinking, in seconds."
"editor_float blink_max" "Maximum time between eye blinking, in seconds."
"blink_min" "2.5"
"blink_max" "8.0"
 
// It's a person
"AIUse" "AIUSE_PERSON"
// It's a Thief!
"personType" "PERSONTYPE_THIEF"
 
    "editor_var def_weapon" "Points to the entity that represents the weapon for slot X. Example: def_weapon0."
 
// Player weapons (the integer index is important)
    "def_weapon0"                   "atdm:weapon_unarmed"
    "def_weapon1"                   "atdm:weapon_blackjack"
    "def_weapon2"                   "atdm:weapon_shortsword"
"def_weapon3"                   "atdm:weapon_broadhead"
    "def_weapon4"                   "atdm:weapon_waterarrow"
    "def_weapon5"                   "atdm:weapon_firearrow"
    "def_weapon6"                   "atdm:weapon_ropearrow"
    "def_weapon7"                   "atdm:weapon_gasarrow"
    "def_weapon8"                   "atdm:weapon_noisemaker"
    "def_weapon9"                   "atdm:weapon_mossarrow" // grayman #2787
"def_weapon10"                  "atdm:weapon_vinearrow" // grayman #2787
 
 
"pm_jumpheight" "48"
"pm_stepsize" "16"
//"pm_crouchspeed" "80"
"pm_walkspeed" "60"
//"pm_runspeed" "220"
"pm_noclipspeed" "200"
"pm_minviewpitch" "-89" // looking up
"pm_maxviewpitch" "89" // looking down
"pm_crouchheight" "38"
"pm_crouchviewheight" "34"
 
"pm_mantle_minflatness" "0.707" // can't mantle on anything steeper than 45 degrees; see cvar description
 
// material dependent climbing speeds (fraction of walk speed):
"climb_max_speed_vert_default" "0.5"
"climb_max_speed_horiz_default" "2.3" // needs to be high for some reason
 
"pm_normalheight" "74"
"pm_normalviewheight" "68"
"pm_deadheight" "20"
"pm_deadviewheight" "10"
"pm_crouchrate" "0.87"
"pm_bboxwidth" "32"
      
// movement settings
 
"pm_bobroll"  "0.0015" //side to side roll
"pm_bobpitch"  "0.001" //forward roll
"pm_bobup"  "0.03"  //upward bounce
"pm_runroll"  "0.003" //running side roll
"pm_runpitch"  "0.001" //run forward pitch
"pm_runbob"  "0.35" //speed of run bob
"pm_walkbob"  "0.3" //speed of walk bob
"pm_crouchbob"  "0.2" //speed of crouch bob
 
"pm_modelview" "0" // 0 == normal, 1 == view inside model, 2 == view inside model when dead
"pm_usecylinder" "1"   // 0 == default, 1 == use cylinder approximation for bounding box.  Needed for Dark Mod
 
"editor_float pain_delay" "How long to wait before playing pain sound, in seconds."
 
"pain_delay" "0.5"
"respawn_delay" "1.7" // minimum delay for respawning after death
 
// stats
"editor_int maxhealth" "The maximum health the player can have."
"health" "100"
"maxhealth" "100"
 
"editor_float collision_damage_threshold_min" "Collision damage below this value is ignored."
"collision_damage_threshold_min" "998"
 
"editor_float collision_damage_threshold_hard" "Collision damage above this value is considered 'hard'."
"collision_damage_threshold_hard" "999"
 
"mouth_offset" "0 0 15" // grayman #1488
"eye_offset" "0 0 19" // grayman #3525
 
"stamina" "120"
"armor" "0"
"maxarmor" "125"
 
// player is always considered an objective ent for end mission location goals
"objective_ent" "1"
 
// Don't spawn moss-blobs on the player entity
"nomoss" "1"
 
// ishtvan: I'm not sure why this was set to 0 but it wants to be 1 for melee
// "bleed" "0"
"bleed" "1"
 
// don't let arrows stick out of the player, looks... awkward
"arrowsticking_disabled" "1"
 
"bone_focus" "headcontrol"
"bone_leftEye" "Leyeaim"
"bone_rightEye" "Reyeaim"
"bone_hips" "Spine"
"bone_chest" "Spine2"   // AI aim location
"bone_head" "Head"// AI aim location
 
"damage_zone head" "*Neck"
"damage_zone chest" "*Spine1 -*Neck"
"damage_zone left_arm" "*LeftArm"
"damage_zone right_arm" "*RightArm"
"damage_zone legs" "origin Spine"
"damage_scale head" "1"
 
"ik_numLegs" "2"
"ik_minWaistAnkleDist" "16"
"ik_footSize" "4"
"ik_waist" "Hips"
"ik_hip1" "LeftUpLeg"
"ik_hip2" "RightUpLeg"
"ik_knee1" "LeftLeg"
"ik_knee2" "RightLeg"
"ik_ankle1" "LeftFoot"
"ik_ankle2" "RightFoot"
//normally a knee joint
//"ik_dir1" "LeftFoot"
//"ik_dir2" "RightFoot"
"ik_foot1" "LeftToeBase"
"ik_foot2" "RightToeBase"
 
"ik_numArms" "2"
"ik_shoulder1" "RightArm"
"ik_shoulder2" "LeftArm"
"ik_elbroadhead1" "RightForeArm"
"ik_elbroadhead2" "LeftForeArm"
"ik_hand1" "RightHand"
"ik_hand2" "LeftHand"
 
"snd_climb_vert_default" "movement_ladder"
"snd_climb_horiz_default" "movement_ladder"
"snd_climb_vert_metal" "tdm_footstep_metal_walk"
"snd_climb_horiz_metal" "tdm_footstep_metal_walk"
"snd_climb_vert_foliage" "tdm_footstep_grass_crouch_walk"
"snd_climb_horiz_foliage" "tdm_footstep_grass_crouch_walk"
"snd_climb_vert_rope" "climb_rope_hemp"
"snd_climb_horiz_rope" "climb_rope_hemp"
"snd_climb_vert_chain" "climb_chain"
"snd_climb_horiz_chain" "climb_chain"
"snd_climb_vert_nosound" "nosound"
"snd_climb_horiz_nosound" "nosound"
 
"snd_rope_climb" "climb_rope_hemp"
"snd_drop_item_failed" "drop_item_failed"
 
 
"snd_death" "tdm_player_die"
"snd_death_liquid" "tdm_player_drown"
 
"snd_pain_small" "tdm_player_damage_hphigh"
"snd_pain_medium" "tdm_player_damage_hphigh"
"snd_pain_large" "tdm_player_damage_hplow"
"snd_pain_huge" "tdm_player_damage_hplow"
 
"snd_damage_land_soft" "tdm_player_damage_softlanding" 
"snd_damage_land_hard" "tdm_player_damage_hardlanding" 
"snd_doublevision" "player_sounds_doublevision"
"snd_thud" "player_sounds_thud"
"snd_heartbeat" "player_sounds_heartbeat"
"snd_heartbeat_dying" "player_sounds_heartbeat_dying"
"snd_skipcinematic" "player_sounds_skipcinematic"
"snd_guienter" "player_sounds_guienter"
"snd_guiexit" "player_sounds_guiexit"
"snd_healthpulse" "nosound"
"snd_hitArmor" "player_sounds_hitArmor"
"snd_hitFlesh" "player_sounds_hitFlesh"
 
"snd_airGasp" "tdm_player_drown"
"snd_resurface" "tdm_player_deepbreath"
 
"snd_noAir" "tdm_player_submerge"
"snd_teleport_exit" "player_sounds_teleportExit"
"snd_teleport_start" "player_sounds_teleportStart"
"snd_burn" "tdm_player_damage_fire"
"snd_healthtake" ""
 
"snd_mission_start" "mission_start"
"snd_new_objective" "mission_new_objective"
    "snd_objective_complete" "mission_objective"
"snd_objective_failed" "mission_objective_failed"
 
"editor_snd snd_shoulder_body" "Sound played when the player shoulders a body."
"editor_snd snd_shoulder_body_heavy" "Sound played when the player shoulders a heavy body."
"snd_shoulder_body" "tdm_player_pickup_body"
"snd_shoulder_body_heavy" "tdm_player_pickup_body_fat"
 
"snd_player_sigh" "tdm_player_sigh"
"snd_player_cough" "tdm_player_cough"
"snd_player_choke_gas" "tdm_player_choke_gas"
 
// grayman #3010 - mantling sounds
"snd_player_mantle_pull" "tdm_player_mantle_pull"
"snd_player_mantle_push" "tdm_player_mantle_push"
 
// grayman #3026 - tired sounds for bow animation
"snd_player_tired" "tdm_player_tired"
 
// material specific footsteps (DarkMod SFX)
//"editor_snd snd_footstep" "Sound played when the player makes a step on the specified surface."
 
    // greebo: The following movetype-dependent footstep shaders are used 
    // when the CVAR tdm_footfall_sounds_movetype_specific is set to "1" (the default)
    // although there are a lot of shaders, they actually refer to a small set of sound files.
    // Otherwise the fallback shader "snd_footstep_<material>" is taken.
 
    // Dirt variations
"snd_footstep_dirt_walk"     "tdm_footstep_dirt_walk"
"snd_footstep_dirt_run"     "tdm_footstep_dirt_run"
"snd_footstep_dirt_creep"     "tdm_footstep_dirt_walk_creep"
"snd_footstep_dirt_crouch_walk"     "tdm_footstep_dirt_crouch_walk"
"snd_footstep_dirt_crouch_run"     "tdm_footstep_dirt_crouch_run"
"snd_footstep_dirt_crouch_creep"    "tdm_footstep_dirt_crouch_creep"
    "snd_jump_dirt"         "tdm_footstep_dirt_jump_land"
 
    // Sand is using "dirt" sounds
"snd_footstep_sand_walk"     "tdm_footstep_dirt_walk"
"snd_footstep_sand_run"     "tdm_footstep_dirt_run"
"snd_footstep_sand_creep"     "tdm_footstep_dirt_walk_creep"
"snd_footstep_sand_crouch_walk"     "tdm_footstep_dirt_crouch_walk"
"snd_footstep_sand_crouch_run"     "tdm_footstep_dirt_crouch_run"
"snd_footstep_sand_crouch_creep"    "tdm_footstep_dirt_crouch_creep"
    "snd_jump_sand"         "tdm_footstep_dirt_jump_land"
 
    // Grass variations
"snd_footstep_grass_walk"     "tdm_footstep_grass_walk"
"snd_footstep_grass_run" "tdm_footstep_grass_run"
"snd_footstep_grass_creep"     "tdm_footstep_grass_walk_creep"
"snd_footstep_grass_crouch_walk" "tdm_footstep_grass_crouch_walk"
"snd_footstep_grass_crouch_run"     "tdm_footstep_grass_crouch_run"
"snd_footstep_grass_crouch_creep"   "tdm_footstep_grass_crouch_creep"
    "snd_jump_grass"     "tdm_footstep_grass_jump_land"
 
    // Straw is using "grass" sounds
"snd_footstep_straw_walk"     "tdm_footstep_grass_walk"
"snd_footstep_straw_run" "tdm_footstep_grass_run"
"snd_footstep_straw_creep"     "tdm_footstep_grass_walk_creep"
"snd_footstep_straw_crouch_walk" "tdm_footstep_grass_crouch_walk"
"snd_footstep_straw_crouch_run"     "tdm_footstep_grass_crouch_run"
"snd_footstep_straw_crouch_creep"   "tdm_footstep_grass_crouch_creep"
    "snd_jump_straw"     "tdm_footstep_grass_jump_land"
 
    // Stone variations
"snd_footstep_stone_walk"     "tdm_footstep_stone_walk"
"snd_footstep_stone_run" "tdm_footstep_stone_run"
"snd_footstep_stone_creep"     "tdm_footstep_stone_walk_creep"
"snd_footstep_stone_crouch_walk" "tdm_footstep_stone_crouch_walk"
"snd_footstep_stone_crouch_run"     "tdm_footstep_stone_crouch_run"
"snd_footstep_stone_crouch_creep"   "tdm_footstep_stone_crouch_creep"
    "snd_jump_stone"     "tdm_footstep_stone_jump_land"
 
    // Tile variations
"snd_footstep_tile_walk"     "tdm_footstep_tile_walk"
"snd_footstep_tile_run"     "tdm_footstep_tile_run"
"snd_footstep_tile_creep"     "tdm_footstep_tile_walk_creep"
"snd_footstep_tile_crouch_walk"     "tdm_footstep_tile_crouch_walk"
"snd_footstep_tile_crouch_run"     "tdm_footstep_tile_crouch_run"
"snd_footstep_tile_crouch_creep"    "tdm_footstep_tile_crouch_creep"
    "snd_jump_tile"         "tdm_footstep_tile_jump_land"
 
    // Puddle (Water) variations
"snd_footstep_puddle_walk"     "tdm_footstep_water_walk"
"snd_footstep_puddle_run" "tdm_footstep_water_run"
"snd_footstep_puddle_creep"     "tdm_footstep_water_walk_creep"
"snd_footstep_puddle_crouch_walk" "tdm_footstep_water_crouch_walk"
"snd_footstep_puddle_crouch_run" "tdm_footstep_water_crouch_run"
"snd_footstep_puddle_crouch_creep"  "tdm_footstep_water_crouch_creep"
    "snd_jump_puddle"         "tdm_footstep_water_jump_land"
    
    // Liquid (water) variations    -- SteveL #3693
"snd_footstep_liquid_walk"     "tdm_footstep_water_walk"
"snd_footstep_liquid_run" "tdm_footstep_water_run"
"snd_footstep_liquid_creep"     "tdm_footstep_water_walk_creep"
"snd_footstep_liquid_crouch_walk" "tdm_footstep_water_crouch_walk"
"snd_footstep_liquid_crouch_run" "tdm_footstep_water_crouch_run"
"snd_footstep_liquid_crouch_creep"  "tdm_footstep_water_crouch_creep"
    "snd_jump_liquid"         "tdm_footstep_water_jump_land"
    
    // Wood variations
"snd_footstep_wood_walk"     "tdm_footstep_wood_walk"
"snd_footstep_wood_run"     "tdm_footstep_wood_run"
"snd_footstep_wood_creep"     "tdm_footstep_wood_walk_creep"
"snd_footstep_wood_crouch_walk"     "tdm_footstep_wood_crouch_walk"
"snd_footstep_wood_crouch_run"     "tdm_footstep_wood_crouch_run"
"snd_footstep_wood_crouch_creep"    "tdm_footstep_wood_crouch_creep"
    "snd_jump_wood"             "tdm_footstep_wood_jump_land"
 
// Metal variations - we don't have move-type specific metal sounds right now
"snd_footstep_metal_walk"     "tdm_footstep_metal_walk"
"snd_footstep_metal_run" "tdm_footstep_metal_run"
"snd_footstep_metal_creep"     "tdm_footstep_metal_walk_creep"
"snd_footstep_metal_crouch_walk" "tdm_footstep_metal_crouch_walk"
"snd_footstep_metal_crouch_run"     "tdm_footstep_metal_crouch_run"
"snd_footstep_metal_crouch_creep"   "tdm_footstep_metal_crouch_creep"
    "snd_jump_metal"         "tdm_footstep_metal_jump_land"
 
    // Don't have a full set of carpet yet
    "snd_footstep_carpet" "tdm_footstep_carpet"
    "snd_jump_carpet" "human_carpet_jump"
    
 
"snd_footstep_puddle" "movement_water"
"snd_footstep_wading" "movement_water"
 
// swim sound goes here
"snd_footstep_swim" ""            // this doesn't appear to do anything?  =Springheel
 
    // default sounds
 
       "snd_footstep_gravel" "human_gravel"
"snd_footstep_glass" "human_glass"
"snd_footstep_snow" "human_snow"
"snd_footstep_ice" "human_ice"
"snd_footstep_cloth" "human_carpet"
"snd_footstep_armor_leath" "human_carpet"
"snd_footstep_flesh" "human_mud"
"snd_footstep_moss" "human_carpet"
        "snd_footstep_foliage" "tdm_footstep_foliage"
        "snd_footstep_foliage_run"      "human_foliage"
 
    // there is no default for jump sounds, so all necessary materials need their own sound
    "snd_jump_wading"     "movement_water_jump"
"snd_jump_gravel" "human_gravel_jump"
"snd_jump_glass" "human_glass_jump"
"snd_jump_snow" "human_snow_jump"
"snd_jump_ice" "human_ice_jump"
         "snd_jump_slate" "tdm_footstep_stone_jump_land"
"snd_jump_foliage" "human_foliage_jump"
 
"snd_jump_cloth" "human_carpet_jump"
"snd_jump_flesh" "human_carpet_jump"
"snd_jump_moss" "human_carpet_jump"
 
 
 
        // default footstep for undefined materials
   "snd_footstep" "tdm_footstep_stone_walk"
 
 
//these materials are outdated, but kept here in case older missions have unique materials that use them
 
       "snd_footstep_mud" "human_mud"
      "snd_footstep_twigs" "human_wood"
"snd_footstep_brokeglass" "human_brokeglass"
"snd_footstep_squeakboard" "human_squeakboard"
 
 
    "snd_jump_mud" "human_mud_jump"
    "snd_jump_cardboard" "human_carpet_jump"
    "snd_jump_twigs" "human_wood_jump"
"snd_jump_brokeglass" "human_brokeglass_jump"
 
"snd_jump_squeakboard" "human_squeakboard_jump"
 
"editor_snd sprs_footstep" "Sound propagated to the AI the player makes a step on the specified surface. The optional number after the colon is a loudness modifier in DB."
"editor_snd sprs_jump" "Sound propagated to the AI the player jumps on the specified surface. The optional number after the colon is a loudness modifier in DB."
 
// propagated sounds (default for materials that are not in the following list, same as stone)
/*"sprS_footstep" "footstep_default_walk:-3.9"
"sprS_footstep_walk" "footstep_default_walk:-3.9"
"sprS_footstep_run" "footstep_default_run:0.9"
"sprS_footstep_creep" "footstep_default_creep:-12"
"sprS_footstep_crouch_walk" "footstep_default_walk:-9"
"sprS_footstep_crouch_run"   "footstep_default_run:-7"
"sprS_footstep_crouch_creep" "footstep_default_creep:-15"
    "sprS_jump"             "footstep_default_jump:2.3"*/
 
          //+++++++++++++++++++++++++++++++++++++++++++++++++++
          // Surface specific volumes
          //+++++++++++++++++++++++++++++++++++++++++++++++++++
 
    //  LOUDEST SURFACES
 
    // metal surface
"sprS_footstep_metal" "footstep_default_walk:1.6"
"sprS_footstep_metal_walk" "footstep_default_walk:1.6"
"sprS_footstep_metal_run" "footstep_default_run:5.5"
"sprS_footstep_metal_creep" "footstep_default_creep:-7.9"
"sprS_footstep_metal_crouch_walk" "footstep_default_walk:-2.9"
"sprS_footstep_metal_crouch_run" "footstep_default_run:-1.5"
"sprS_footstep_metal_crouch_creep" "footstep_default_creep:-15"
    "sprS_jump_metal"                        "footstep_default_jump:6.4"
 
    // puddle
"sprS_footstep_puddle" "footstep_default_walk:2"
"sprS_footstep_puddle_walk" "footstep_default_walk:2"
"sprS_footstep_puddle_run" "footstep_default_run:5.5"
"sprS_footstep_puddle_creep" "footstep_default_creep:-2"
"sprS_footstep_puddle_crouch_walk" "footstep_default_walk:0"
"sprS_footstep_puddle_crouch_run" "footstep_default_run:0"
"sprS_footstep_puddle_crouch_creep" "footstep_default_creep:-9"
    "sprS_jump_puddle"           "footstep_default_jump:5.2"
 
    // tile surface -
"sprS_footstep_tile" "footstep_default_walk:1.0"
"sprS_footstep_tile_walk" "footstep_default_walk:1.0"
"sprS_footstep_tile_run" "footstep_default_run:4.5"
"sprS_footstep_tile_creep" "footstep_default_creep:-8.5"
"sprS_footstep_tile_crouch_walk" "footstep_default_walk:-2.4"
"sprS_footstep_tile_crouch_run" "footstep_default_run:-2.5"
"sprS_footstep_tile_crouch_creep" "footstep_default_creep:-15"
    "sprS_jump_tile"             "footstep_default_jump:6.0"
 
    // glass - same as tile
"sprS_footstep_glass" "footstep_default_walk:1.0"
"sprS_footstep_glass_walk" "footstep_default_walk:1.0"
"sprS_footstep_glass_run" "footstep_default_run:4.5"
"sprS_footstep_glass_creep" "footstep_default_creep:-8.5"
"sprS_footstep_glass_crouch_walk" "footstep_default_walk:-2.4"
"sprS_footstep_glass_crouch_run" "footstep_default_run:-2.5"
"sprS_footstep_glass_crouch_creep" "footstep_default_creep:-15"
    "sprS_jump_glass"             "footstep_default_jump:6.0"
 
    // squeakboard -    //not supported
"sprS_footstep_squeakboard" "footstep_default_walk:5.5"
"sprS_footstep_squeakboard_walk" "footstep_default_walk:5.5"
"sprS_footstep_squeakboard_run" "footstep_default_run:7.5"
"sprS_footstep_squeakboard_creep" "footstep_default_creep:-4.0"
"sprS_footstep_squeakboard_crouch_walk" "footstep_default_walk:-0.25"
"sprS_footstep_squeakboard_crouch_run" "footstep_default_run:1.5"
"sprS_footstep_squeakboard_crouch_creep" "footstep_default_creep:-13"
    "sprS_jump_squeakboard"             "footstep_default_jump:8.0"
 
// gravel
"sprS_footstep_gravel" "footstep_default_walk:1"
"sprS_footstep_gravel_walk" "footstep_default_walk:1"
"sprS_footstep_gravel_run" "footstep_default_run:2"
"sprS_footstep_gravel_creep" "footstep_default_creep:-5.7"
"sprS_footstep_gravel_crouch_walk" "footstep_default_walk:-2"
"sprS_footstep_gravel_crouch_run" "footstep_default_run:-4"
"sprS_footstep_gravel_crouch_creep" "footstep_default_creep:-10"
    "sprS_jump_gravel"              "footstep_default_jump:3.2"
 
    // twigs
"sprS_footstep_twigs" "footstep_default_walk:2"
"sprS_footstep_twigs_walk" "footstep_default_walk:2"
"sprS_footstep_twigs_run" "footstep_default_run:3.8"
"sprS_footstep_twigs_creep" "footstep_default_creep:-5.7"
"sprS_footstep_twigs_crouch_walk" "footstep_default_walk:-2"
"sprS_footstep_twigs_crouch_run" "footstep_default_run:-3"
"sprS_footstep_twigs_crouch_creep" "footstep_default_creep:-9"
    "sprS_jump_twigs"              "footstep_default_jump:5.2"
 
// brokeglass - same as gravel
"sprS_footstep_brokeglass" "footstep_default_walk:1"
"sprS_footstep_brokeglass_walk" "footstep_default_walk:1"
"sprS_footstep_brokeglass_run" "footstep_default_run:2"
"sprS_footstep_brokeglass_creep" "footstep_default_creep:-5.7"
"sprS_footstep_brokeglass_crouch_walk" "footstep_default_walk:-2"
"sprS_footstep_brokeglass_crouch_run" "footstep_default_run:-4"
"sprS_footstep_brokeglass_crouch_creep" "footstep_default_creep:-10"
    "sprS_jump_brokeglass"              "footstep_default_jump:3.2"
 
    // DEFAULT SURFACES
 
        // wading
"sprS_footstep_wading" "footstep_default_walk:-3"
"sprS_footstep_wading_walk" "footstep_default_walk:-3"
"sprS_footstep_wading_run" "footstep_default_run:5"
"sprS_footstep_wading_creep" "footstep_default_creep:-9.5"
"sprS_footstep_wading_crouch_walk" "footstep_default_walk:-6"
"sprS_footstep_wading_crouch_run" "footstep_default_run:-8"
"sprS_footstep_wading_crouch_creep" "footstep_default_creep:-16"
    "sprS_jump_wading"           "footstep_default_jump:3.2"
 
    // ice
"sprS_footstep_ice" "footstep_default_walk:-1.5"
"sprS_footstep_ice_walk" "footstep_default_walk:-1.5"
"sprS_footstep_ice_run" "footstep_default_run:-1.5"
"sprS_footstep_ice_creep" "footstep_default_creep:-10"
"sprS_footstep_ice_crouch_walk" "footstep_default_walk:-5.5"
"sprS_footstep_ice_crouch_run" "footstep_default_run:-8.5"
"sprS_footstep_ice_crouch_creep" "footstep_default_creep:-15"
    "sprS_jump_ice"                 "footstep_default_jump:2.7"
 
    // wood surface -- slightly louder than stone
"sprS_footstep_wood" "footstep_default_walk:-3.6"
"sprS_footstep_wood_walk" "footstep_default_walk:-3.6"
"sprS_footstep_wood_run" "footstep_default_run:1.2"
"sprS_footstep_wood_creep" "footstep_default_creep:-11.7"
"sprS_footstep_wood_crouch_walk" "footstep_default_walk:-7.7"
"sprS_footstep_wood_crouch_run" "footstep_default_run:-6.7"
"sprS_footstep_wood_crouch_creep" "footstep_default_creep:-15"
    "sprS_jump_wood"             "footstep_default_jump:2.3"
 
    // stone surface
"sprS_footstep_stone" "footstep_default_walk:-3.9"
"sprS_footstep_stone_walk" "footstep_default_walk:-3.9"
"sprS_footstep_stone_run" "footstep_default_run:0.8"
"sprS_footstep_stone_creep" "footstep_default_creep:-12"
"sprS_footstep_stone_crouch_walk" "footstep_default_walk:-7.9"
"sprS_footstep_stone_crouch_run" "footstep_default_run:-7"
"sprS_footstep_stone_crouch_creep" "footstep_default_creep:-15"
    "sprS_jump_stone"             "footstep_default_jump:2"
 
    // armor_plate - same as stone
"sprS_footstep_armor_plate" "footstep_default_walk:-3.9"
"sprS_footstep_armor_plate_walk" "footstep_default_walk:-3.9"
"sprS_footstep_armor_plate_run" "footstep_default_run:0.8"
"sprS_footstep_armor_plate_creep" "footstep_default_creep:-12"
"sprS_footstep_armor_plate_crouch_walk" "footstep_default_walk:-7.9"
"sprS_footstep_armor_plate_crouch_run" "footstep_default_run:-7"
"sprS_footstep_armor_plate_crouch_creep" "footstep_default_creep:-15"
    "sprS_jump_armor_plate"              "footstep_default_jump:2"
 
 
 
// foliage
"sprS_footstep_foliage" "footstep_default_walk:-3.3"
"sprS_footstep_foliage_walk" "footstep_default_walk:-3.3"
"sprS_footstep_foliage_run" "footstep_default_run:-1.5"
"sprS_footstep_foliage_creep" "footstep_default_creep:-9.3"
"sprS_footstep_foliage_crouch_walk" "footstep_default_walk:-4.3"
"sprS_footstep_foliage_crouch_run" "footstep_default_run:-8.5"
"sprS_footstep_foliage_crouch_creep" "footstep_default_creep:-13"
    "sprS_jump_foliage"              "footstep_default_jump:0.3"
 
    // QUIET SURFACES
 
// snow
"sprS_footstep_snow" "footstep_default_walk:-6.3"
"sprS_footstep_snow_walk" "footstep_default_walk:-6.3"
"sprS_footstep_snow_run" "footstep_default_run:-4.5"
"sprS_footstep_snow_creep" "footstep_default_creep:-14"
"sprS_footstep_snow_crouch_walk" "footstep_default_walk:-9.3"
"sprS_footstep_snow_crouch_run" "footstep_default_run:-8.5"
"sprS_footstep_snow_crouch_creep" "footstep_default_creep:-16"
    "sprS_jump_snow"             "footstep_default_jump:-3.3"
 
    // dirt
"sprS_footstep_dirt" "footstep_default_walk:-6.3"
"sprS_footstep_dirt_walk" "footstep_default_walk:-6.3"
"sprS_footstep_dirt_run" "footstep_default_run:-4.5"
"sprS_footstep_dirt_creep" "footstep_default_creep:-13.3"
"sprS_footstep_dirt_crouch_walk" "footstep_default_walk:-10.3"
"sprS_footstep_dirt_crouch_run" "footstep_default_run:-9"
"sprS_footstep_dirt_crouch_creep" "footstep_default_creep:-15"
    "sprS_jump_dirt"              "footstep_default_jump:-3.3"
 
// sand
"sprS_footstep_sand" "footstep_default_walk:-6.5"
"sprS_footstep_sand_walk" "footstep_default_walk:-6.5"
"sprS_footstep_sand_run" "footstep_default_run:-4.5"
"sprS_footstep_sand_creep" "footstep_default_creep:-15"
"sprS_footstep_sand_crouch_walk" "footstep_default_walk:-10.5"
"sprS_footstep_sand_crouch_run" "footstep_default_run:-8.5"
"sprS_footstep_sand_crouch_creep" "footstep_default_creep:-16"
    "sprS_jump_sand"              "footstep_default_jump:-4.5"
 
    // straw
"sprS_footstep_straw" "footstep_default_walk:-6"
"sprS_footstep_straw_walk" "footstep_default_walk:-6"
"sprS_footstep_straw_run" "footstep_default_run:-5"
"sprS_footstep_straw_creep" "footstep_default_creep:-11"
"sprS_footstep_straw_crouch_walk" "footstep_default_walk:-10"
"sprS_footstep_straw_crouch_run" "footstep_default_run:-8.5"
"sprS_footstep_straw_crouch_creep" "footstep_default_creep:-15"
    "sprS_jump_straw"            "footstep_default_jump:-3.8"
 
    // armor_chain
"sprS_footstep_armor_chain" "footstep_default_walk:-6.3"
"sprS_footstep_armor_chain_walk" "footstep_default_walk:-6.3"
"sprS_footstep_armor_chain_run" "footstep_default_run:-4.5"
"sprS_footstep_armor_chain_creep" "footstep_default_creep:-15"
"sprS_footstep_armor_chain_crouch_walk" "footstep_default_walk:-10.5"
"sprS_footstep_armor_chain_crouch_run" "footstep_default_run:-8.5"
"sprS_footstep_armor_chain_crouch_creep" "footstep_default_creep:-16"
    "sprS_jump_armor_chain"              "footstep_default_jump:-3.3"
 
// grass
"sprS_footstep_grass" "footstep_default_walk:-8.1"
"sprS_footstep_grass_walk" "footstep_default_walk:-8.1"
"sprS_footstep_grass_run" "footstep_default_run:-6"
"sprS_footstep_grass_creep" "footstep_default_creep:-16"
"sprS_footstep_grass_crouch_walk" "footstep_default_walk:-11.1"
"sprS_footstep_grass_crouch_run" "footstep_default_run:-10"
"sprS_footstep_grass_crouch_creep" "footstep_default_creep:-18"
    "sprS_jump_grass"                 "footstep_default_jump:-3.8"
 
// mud -
"sprS_footstep_mud" "footstep_default_walk:-7.5"
"sprS_footstep_mud_walk" "footstep_default_walk:-7.5"
"sprS_footstep_mud_run" "footstep_default_run:-5"
"sprS_footstep_mud_creep" "footstep_default_creep:-15"
"sprS_footstep_mud_crouch_walk" "footstep_default_walk:-10.5"
"sprS_footstep_mud_crouch_run" "footstep_default_run:-9"
"sprS_footstep_mud_crouch_creep" "footstep_default_creep:-18"
    "sprS_jump_mud"              "footstep_default_jump:-3.8"
 
// carpet - very quiet
"sprS_footstep_carpet" "footstep_default_walk:-12"
"sprS_footstep_carpet_walk" "footstep_default_walk:-12"
"sprS_footstep_carpet_run" "footstep_default_run:-9"
"sprS_footstep_carpet_creep" "footstep_default_creep:-20"
"sprS_footstep_carpet_crouch_walk" "footstep_default_walk:-15"
"sprS_footstep_carpet_crouch_run" "footstep_default_run:-13"
"sprS_footstep_carpet_crouch_creep" "footstep_default_creep:-23"
    "sprS_jump_carpet"               "footstep_default_jump:-7.8"
 
// cloth - same as carpet
"sprS_footstep_cloth" "footstep_default_walk:-12"
"sprS_footstep_cloth_walk" "footstep_default_walk:-12"
"sprS_footstep_cloth_run" "footstep_default_run:-9"
"sprS_footstep_cloth_creep" "footstep_default_creep:-20"
"sprS_footstep_cloth_crouch_walk" "footstep_default_walk:-15"
"sprS_footstep_cloth_crouch_run" "footstep_default_run:-13"
"sprS_footstep_cloth_crouch_creep" "footstep_default_creep:-23"
    "sprS_jump_cloth"            "footstep_default_jump:-7.8"
 
// leather armor
"sprS_footstep_armor_leath" "footstep_default_walk:-12"
"sprS_footstep_armor_leath_walk" "footstep_default_walk:-12"
"sprS_footstep_armor_leath_run" "footstep_default_run:-9"
"sprS_footstep_armor_leath_creep" "footstep_default_creep:-18"
"sprS_footstep_armor_leath_crouch_walk" "footstep_default_walk:-15"
"sprS_footstep_armor_leath_crouch_run" "footstep_default_run:-13"
"sprS_footstep_armor_leath_crouch_creep" "footstep_default_creep:-20"
    "sprS_jump_armor_leath"              "footstep_default_jump:-7.8"
 
// flesh
"sprS_footstep_flesh" "footstep_default_walk:-12"
"sprS_footstep_flesh_walk" "footstep_default_walk:-12"
"sprS_footstep_flesh_run" "footstep_default_run:-9"
"sprS_footstep_flesh_creep" "footstep_default_creep:-18"
"sprS_footstep_flesh_crouch_walk" "footstep_default_walk:-15"
"sprS_footstep_flesh_crouch_run" "footstep_default_run:-13"
"sprS_footstep_flesh_crouch_creep" "footstep_default_creep:-20"
    "sprS_jump_flesh"            "footstep_default_jump:-7.8"
 
    // paper - same as carpet
"sprS_footstep_paper" "footstep_default_walk:-12"
"sprS_footstep_paper_walk" "footstep_default_walk:-12"
"sprS_footstep_paper_run" "footstep_default_run:-9"
"sprS_footstep_paper_creep" "footstep_default_creep:-18"
"sprS_footstep_paper_crouch_walk" "footstep_default_walk:-15"
"sprS_footstep_paper_crouch_run" "footstep_default_run:-13"
"sprS_footstep_paper_crouch_creep" "footstep_default_creep:-20"
    "sprS_jump_paper"            "footstep_default_jump:-7.8"
 
// moss - quieter than carpet
"sprS_footstep_moss" "footstep_default_walk:-16"
"sprS_footstep_moss_walk" "footstep_default_walk:-16"
"sprS_footstep_moss_run" "footstep_default_run:-10"
"sprS_footstep_moss_creep" "footstep_default_creep:-21"
"sprS_footstep_moss_crouch_walk" "footstep_default_walk:-19"
"sprS_footstep_moss_crouch_run" "footstep_default_run:-14"
"sprS_footstep_moss_crouch_creep" "footstep_default_creep:-24"
    "sprS_jump_moss"             "footstep_default_jump:-8.8"
 
// grayman #3413 - swimming
 
"sprS_decompress" "decompress" // submerging
"sprS_recompress" "recompress" // surfacing
 
// water particles
"snd_water" "splash_long_01"
"smoke_water" "water_splash_large"
 
// The heal response
"sr_class_1" "R"
"sr_type_1" "STIM_HEALING"
"sr_state_1" "1"
 
// Effect: Heal the player
"sr_effect_1_1" "effect_heal"
"sr_effect_1_1_arg1" "_SELF"
"sr_effect_1_1_arg2" "heal_generic" // SND_CHANNEL_VOICE
"sr_effect_1_1_arg3" "snd_player_sigh" // the sound shader
 
// The damage response
"sr_class_2" "R"
"sr_type_2" "STIM_DAMAGE"
"sr_state_2" "1"
"sr_effect_2_1" "effect_damage"
"sr_effect_2_1_arg1" "_SELF"
"sr_effect_2_1_arg2" "atdm:damage_low"
 
// The "Thief" stim
"sr_class_3" "S"
"sr_type_3" "STIM_PLAYER"
"sr_state_3" "1"
"sr_radius_3" "350"
"sr_falloffexponent_3" "1"
"sr_magnitude_3" "1"
"sr_time_interval_3" "1500"
 
// The damage response
"sr_class_4" "R"
"sr_type_4" "STIM_DAMAGE"
"sr_state_4" "1"
"sr_effect_4_1" "effect_damage"
"sr_effect_4_1_arg1" "_SELF"
"sr_effect_4_1_arg2" "atdm:damage_low"
}
 
entityDef atdm:player_thief
{
"inherit" "atdm:player_base"
"model" "model_player_thief"
"ragdoll" "guard_base"
 
"mass" "70"
 
"editor_displayFolder" "Internal"
 
// replace with player entering/leaving water sounds (taking a deep breath / letting out maybe?)
//"snd_decompress" "splash_long_01"
"snd_decompress" "splash_subtle_01" // grayman #3413
"snd_recompress" "splash_subtle_01"
"snd_airless" "underwater"
 
    "def_head" "atdm:ai_head_thief_player"
"head_joint" "Head"
         "offsetHeadModel"         "0 0 -7"
 
 
//"copy_joint neckcontrol" "neckcontrol"
//"copy_joint headcontrol" "headcontrol"
//"copy_joint_world eyecontrol" "eyecontrol"
 
// Player is always on team 0
"team" "0"
}
 
 
 
entityDef atdm:ai_head_thief_player
{
"inherit" "atdm:ai_head_base"
"model" "head_thief"
 
"scriptobject" "tdm_player_head"
 
// greebo: Add the GAS response to the thief's head, this will be 
// targetted at the Thief entity itself as AF attachments redirect responses to their body
"sr_class_4" "R"
"sr_type_4" "STIM_GAS"
"sr_state_4" "1"
 
// Use a custom script function for the player's gas effect
"sr_script_STIM_GAS" "responseToGasStim"
 
// Effect: damage the player, additional to the response script
"sr_effect_4_1" "effect_damage"
"sr_effect_4_1_arg1" "_SELF"
"sr_effect_4_1_arg2" "atdm:damage_simple"
}
 
entityDef info_player_start
{
"spawnclass" "idPlayerStart"
 
"editor_color" "1 0 0"
"editor_mins" "-16 -16 0"
"editor_maxs" "16 16 64"
"editor_showangle" "1"
 
"editor_usage" "The spawning position for the player."
"editor_var skin" "Skin to use for player model."
}
 
// Used to teleport the player after a cinematic
entityDef info_player_teleport
{
"editor_color" "1 0.2 0.1"
"editor_mins" "-16 -16 0"
"editor_maxs" "16 16 64"
"editor_showangle" "1"
 
"editor_usage" "Spawning position player after cinematic.  When triggered, player will be moved to this location."
"editor_float push" "How much of a push to give to the player when he is teleported."
"editor_var visualView" "Camera to set player's view to when he is teleported."
"editor_float visualEffect" "How long to show the view from the visualView."
 
"spawnclass" "idPlayerStart"
 
"push" "300"
"visualEffect" "0"
"visualView" ""
}
 
tdm_weapon_arrow.def  I modified the damage so that both the ai and I kill each other with one arrow, but this can be abused to make the game far too easy.   "inherit" "atdm:damage_base"
"damage" "9999"
 
Spoiler
 
  This entityDef contains all the things common between all arrows.
  There are many things here left un-implemented that must be
  implemented in the actual arrow.
 
***********************************************************************/
 
// Base class for all arrow weapons
entityDef atdm:weapon_arrow_base
{
    "inherit"                   "atdm:weapon_base"
    
    "editor_usage" "Generic arrow weapon - do not use. Other arrow weapons inherit from this."
    "editor_displayFolder" "Internal/Weapons"
 
"editor_snd snd_arrow_draw" "Sound to play when the arrow is drawn back before firing."
"editor_snd snd_bow_unsheath" "Sound to play when the bow is getting ready."
"editor_snd snd_bow_sheath" "Sound to play when the bow is put away."
"editor_snd snd_equip" "Sound to play when an arrow is nocked."
 
"model_view" "viewmodel_arrow" // Override this value in your implementation if you want a different look
        "anim_rate_attack_start"               ".7"       //slows animation slightly so player can't quickfire
 
"inv_lgmodifier"            "0" // Base amount of increase in lightgem brightness when equipped
 
"ammo_required" "1" // Can't select this weapon unless you have ammo for it
 
    "weapon_scriptobject"     "weapon_arrow"
 
// arrow to attach in firing animation. Change this for derived classes.
"def_attach" ""
 
// Bow aimer attachment
"def_aimer" "atdm:attachment_aimer"
 
"snd_arrow_draw" "bow_draw"
"snd_bow_unsheath" "bow_unsheath"
"snd_bow_sheath" "bow_sheath"
"snd_equip" "arrow_equip"
}
 
// Base class for aimer
entityDef atdm:attachment_aimer
{
"inherit"         "atdm:entity_base"
"joint"         "bowbone"
 
"editor_displayFolder"  "Internal/Weapons/Attachements"
 
"model" "models/darkmod/player_equipment/bowaimer_01.lwo"
 
"spawnclass"     "idStaticEntity"
"noclipmodel"     "1"
"no_frob_box"     "1"
 
"frobable"         "0"
"angles"         "0 90 0"
"origin"         "2 0.74 0.2"
"noshadows"         "1"
}
 
 
model viewmodel_arrow 
{
mesh models/md5/weapons/shortbow/shortbow.md5mesh
//offset ( 6 3 -3 )
offset ( -10 0 -6.5 )
 
anim raise  models/md5/weapons/shortbow/get.md5anim {
frame 1 sound_weapon snd_bow_unsheath
}
anim idle  models/md5/weapons/shortbow/idle.md5anim {
frame 1 object_call ArrowVisible
}
anim lower   models/md5/weapons/shortbow/putaway.md5anim
{
frame 5 sound_weapon snd_bow_sheath
}
anim attack_start models/md5/weapons/shortbow/drawback.md5anim
{
frame 22 sound_weapon snd_arrow_draw
}
anim attack  models/md5/weapons/shortbow/fire.md5anim
{
frame 1 object_call ArrowVisible
frame 1                                 sound shortbow_fire
frame 2 object_call ArrowInvisible
 
}
anim tired   models/md5/weapons/shortbow/tired.md5anim {
frame 1 object_call ArrowVisible
frame 14 object_call ArrowInvisible
}
anim cancel   models/md5/weapons/shortbow/cancel.md5anim {
frame 1 object_call ArrowVisible
frame 14 object_call ArrowInvisible
}
}
 
entityDef atdm:projectile_arrow
{
"inherit" "atdm:projectile_base"
 
// Crispy: Arrows in flight shouldn't raise visual alerts
"AIUse" ""
 
"editor_usage" "Base class for all arrow projectiles"
"spawnclass" "idProjectile"
"mins"        "-1 -1 -2"
"maxs"        "1 1 0"
"cone"        "1"
 
"def_damage" "atdm:damage_arrow"
"has_result" "0"
 
"axial_dir"     "0 0 1"
 
"launchFromBarrel" "1"
 
// greebo: Fire this projectile along the player's forward direction
"fire_along_playerview" "1"
 
"health" "5" // amount of damage projectile can take if damaged (0 means it can't be destroyed)
"broken" "" // no default broken model, the broken pieces are spawned on impact
"velocity" "1800 0 0"
"angular_velocity" "-299 0 0" // how the projectile is rotating when it leaves the gun
 
"thrust" "0" // the rate of acceleration (always in the direction of the projectiles model)
"thrust_start" "0" // when to start accelerating
"thrust_end" "0" // when to stop accelerating
 
"linear_friction" "1.3"
"angular_friction" "0.01"
"contact_friction" "0"
 
"bounce" "0" // how much speed a projectile retains when it bounces off of objects (coefficient of restitution).  0 means no bounce.
"mass" "5"
"gravity" "532" // how much gravity affects the trajectory.  gravity direction is same as the entity that fired it.
"fuse" "999" // how long before the projectile is removed or self-detonates.  Use 0 for beam weapons (velocity == distance).
 
"detonate_on_fuse" "0" // whether projectile should detonate when it's fuse runs out
"detonate_on_death" "0" // whether projectile should detonate when it's "killed" (health runs out)
"detonate_on_world" "1" // whether projectile should detonate when it hits an obstacle
"detonate_on_actor" "1" // whether projectile should detonate when it hits a character in the game
"detonate_on_water" "0" // whether projectile should detonate when it hits a water surface
"impact_damage_effect" "1" // whether projectile causes blood splats from characters that bleed
"impact_gib" "0" // whether projectile can gib a character or not (for example: bullets don't gib, but rockets do)
 
// will be overloaded by firearrow, but should work for other arrows
 
"snd_fly" "arrow_flight"   //needs to be a looping sound
 
"snd_water" "arrow_water_impact" // sound played when arrow hits water
 
// bind arrow to object when it collides
 
"bindOnImpact" "0"
 
// Stim that triggers visual recognition of this as an out of place object when seen
"sr_class_1" "S"
"sr_type_1" "STIM_VISUAL"
"sr_state_1" "1"
"sr_radius_1" "500"
"sr_time_interval_1" "500"  // half second 
}
 
entityDef atdm:damage_arrow
{
"inherit" "atdm:damage_base"
"damage" "9999"
"kickDir" "1 0 0"
 
//Baddcog : lowered push from 200, seemed a little strong since other arrows don't push
"push" "100"
 
"mtr_blob" "genericDamage"
"blob_time" "300"
"blob_size" "400"
"blob_offset_x" "400"
 
"knockback" "10"
"kick_time" "400"
"kick_amplitude" "1"
 
"dv_time" "100"
"mtr_wound_flesh" "textures/decals/hurt_small"
    "mtr_wound_cloth"           "textures/decals/hurt_small"
    "mtr_splat_flesh"           "textures/decals/hurt_small"
   
    // grayman #3386 - need these to drop blood markers
 
    "mtr_killed_splat1"          "textures/darkmod/decals/blood/blood01"
    "mtr_killed_splat2"          "textures/darkmod/decals/blood/blood02"
    "mtr_killed_splat3"          "textures/darkmod/decals/blood/blood03"
    "mtr_killed_splat4"          "textures/darkmod/decals/blood/blood04"
    "mtr_killed_splat5"          "textures/darkmod/decals/blood/blood05"
    "mtr_killed_splat6"          "textures/darkmod/decals/blood/blood06"
    "mtr_killed_splat7"          "textures/darkmod/decals/blood/blood07"
    "mtr_killed_splat8"          "textures/darkmod/decals/blood/blood08"
    "mtr_killed_splat9"          "textures/darkmod/decals/blood/blood09"
}
 
// Projectile result:
entityDef atdm:result_arrow_base
{
"inherit" "atdm:entity_base"
"spawnclass" "CProjectileResult"
"scriptobject" "result_arrow_base"
 
"editor_displayFolder" "Internal/Weapons/Projectiles/Results"
"editor_usage" "The result of an projectile"
 
"AIUse" "AIUSE_SUSPICIOUS" // grayman #1327
 
"copy_bind" "0"
"remove_delay" "120"
 
// Stim that triggers visual recognition of this as an out of place object when seen
"sr_class_1" "S"
"sr_type_1" "STIM_VISUAL"
"sr_state_1" "1"
"sr_radius_1" "500"
"sr_time_interval_1" "500"  // half second
}
[spoiler]
 
tdm_weapon_shortsword.def  I adjusted the damage of the shortsword so I could kill anything in one hit, but this does make enemies that are supposed to be very powerful like Alberic; not so scary anymore; "inherit" "atdm:melee_base"
"damage" "9999"
 
You can also adjust how much damage is dealt to different kinds of armors. I since sword would still deal blunt force trauma, I made it so plate armor doesn't stop all damage: "damage_mult_flesh"     "1.0"
"damage_mult_undeadflesh" "1.0" // Sword damage multiplier for player attacking zombies
        "damage_mult_undeadbone" "1.0" // Sword damage multiplier for player attacking skeletons
"damage_mult_cloth"     "1.0"
"damage_mult_armor_leath" "1.0"
"damage_mult_armor_chain" "1.0"
"damage_mult_armor_plate" "0.25"
 
[spoiler]// vim:ts=4:sw=4:cindent
//
// ======================== Shortsword ==================================
//
 
entityDef atdm:weapon_shortsword
{
    "inherit" "atdm:weapon_base"
 
"editor_usage"          "The Shortsword"
    "editor_displayFolder"  "Weapons/Melee"
 
"model_view"  "viewmodel_shortsword"
    
    // a unique weapon name, used by ammunition entities
    "inv_weapon_name"       "shortsword" 
 
    // The display name of this weapon (for the HUD)
    "inv_name"              "#str_02429" // Shortsword
    "inv_icon"              "guis/assets/hud/weapon_icons/shortsword_icon"
 
    "model"                 "models/darkmod/weapons/shortsword.lwo"
    "spawnclass"            "idMoveable"
    "frobable"              "1"
 
"is_weapon_melee" "1"
 
    // add 3 levels to the lightgem when this weapon is drawn
"inv_lgmodifier" "0"
 
    "ammo_required"         "0" // doesn't need no ammo
 
    "weapon_scriptobject"   "weapon_shortsword"
 
    "def_melee" "melee_shortsword_rl"
 
    // Attachment entity for melee combat
"def_attach1" "atdm:attachment_melee_shortsword"
"name_attach1" "meleeweap_r"
 
    "impact_damage_effect" "1"
 
    // Always play a swing sound when we swing, regardless of hit or not later
"snd_acquire" "tool_pickup"
"snd_swing" "sword_swing"
 
"skin_invisible" "skins/shortsword_invis"
 
// animation rates for adjusting melee parries
// may run into problems (aliasing, etc) if rate goes too high
 
"anim_rate_parry_LR" "2.5"
"anim_rate_parry_RL" "2.5"
"anim_rate_parry_Over" "2.4"
"anim_rate_parry_Thrust" "2.5"
 
"anim_rate_attack_LR" "1.3"
"anim_rate_attack_RL" "1.3"
"anim_rate_attack_Over" "1.3"
        "anim_rate_attack_Thrust" "1.3"
 
"anim_rate_cancel_attack_LR" "1.15"
"anim_rate_cancel_attack_RL" "1.15"
"anim_rate_cancel_attack_Over" "1.15"
"anim_rate_cancel_attack_Thrust" "1.15"
 
"anim_rate_raise" "1.5"
}
 
// right to left slash hit damage, particle FX, etc.
entityDef melee_shortsword_rl 
{
"inherit" "atdm:melee_base"
"damage" "9999"
"kickDir" "0 1 0"
 
"impact_damage_effect" "1"
"mtr_blob" "genericDamage"
"blob_time" "300"
"blob_size" "400"
"blob_offset_x" "400"
 
"knockback" "10"
"push" "3200"
 
"gib" "0"
 
"damage_mult_flesh"     "1.0"
"damage_mult_undeadflesh" "1.0" // Sword damage multiplier for player attacking zombies
        "damage_mult_undeadbone" "1.0" // Sword damage multiplier for player attacking skeletons
"damage_mult_cloth"     "1.0"
"damage_mult_armor_leath" "1.0"
"damage_mult_armor_chain" "1.0"
"damage_mult_armor_plate" "0.25"
 
"smoke_wound_flesh"     "burstysquirt.prt"
"smoke_wound_cloth" "burstysquirt.prt"
"smoke_wound_armor_leather" "burstysquirt.prt"
 
// these aren't strictly necessary, but maybe
// someone wants to make weak plate mail you can hit thru
// or a metal robot that bleeds oil or something
// for now, they just do sparks
"smoke_wound_armor_plate" "chainsawstrike.prt"
"smoke_wound_metal"     "chainsawstrike.prt"
"mtr_wound_flesh" "textures/decals/hurt02"
"mtr_wound_cloth" "textures/decals/hurt02"
"mtr_wound_armor_leath" "textures/decals/hurt02"
"mtr_wound_straw" "textures/decals/hurt02"
 
 
    "mtr_killed_splat1"          "textures/darkmod/decals/blood/blood01"
    "mtr_killed_splat2"          "textures/darkmod/decals/blood/blood02"
    "mtr_killed_splat3"          "textures/darkmod/decals/blood/blood03"
    "mtr_killed_splat4"          "textures/darkmod/decals/blood/blood04"
    "mtr_killed_splat5"          "textures/darkmod/decals/blood/blood05"
    "mtr_killed_splat6"          "textures/darkmod/decals/blood/blood06"
    "mtr_killed_splat7"          "textures/darkmod/decals/blood/blood07"
    "mtr_killed_splat8"          "textures/darkmod/decals/blood/blood08"
    "mtr_killed_splat9"          "textures/darkmod/decals/blood/blood09"
 
 
// particle FX when we hit non-bleeders
"smoke_strike_metal" "chainsawstrike.prt"
"smoke_strike_armor_plate" "chainsawstrike.prt"
         
// chance of getting a spark when we strike metal
"smoke_chance_metal" "0.4"
"smoke_chance_armor_plate" "0.5"
 
 
// decals when hitting non bleeders: 
// Don't currently have any, would use mtr_strike_*
 
"kick_time" "400"
"kick_amplitude" "1"
 
"dv_time" "100"
 
// default surface type if we cannot detect surface type hit
"default_surface_inanimate" "metal"
"default_surface_actor" "flesh"
 
// default sound to play if all else goes wrong
"snd_hit" "weapon_hit_default"
 
"snd_metal" "sword_hit_metal"
"snd_ricochet" "sword_hit_wood"
"snd_flesh" "sword_hit_flesh"
"snd_undeadflesh" "sword_hit_chain"
"snd_stone" "sword_hit_metal"
"snd_wood" "sword_hit_wood"
"snd_cardboard" "blackjack_hit_wood"
"snd_glass" "sword_hit_wood"
"snd_liquid" "melee_hit_water"
"snd_plastic" "sword_hit_wood"
"snd_armor_plate" "sword_hit_armor_plate"
 
"snd_armor_chain" "sword_hit_chain"
 
"snd_armor_leath" "sword_hit_chain"
"snd_cloth" "sword_hit_flesh" 
 
// Propagated sounds for hitting objects other than flesh
"sprS_metal" "sword_hit_hard"
"sprS_armor_plate" "sword_hit_hard"
"sprS_ricochet" "sword_hit_hard"
"sprS_stone" "sword_hit_hard"
"sprS_wood" "sword_hit_hard"
"sprS_glass" "sword_hit_hard"
"sprS_flesh"            "sword_hit_flesh"
"sprS_cloth"            "sword_hit_flesh"
"sprS_armor_chain"            "sword_hit_flesh"
"sprS_armor_leath"            "sword_hit_flesh"
}
 
entityDef melee_shortsword_lr 
{
"inherit" "melee_shortsword_rl"
"kickDir" "0 -1 0"
}
 
entityDef melee_shortsword_ovr
{
"inherit" "melee_shortsword_rl"
"kickDir" "0 0 -1"
}
 
entityDef melee_shortsword_thrust
{
"inherit" "melee_shortsword_rl"
"kickDir" "-1 0 0"
}
 
model viewmodel_shortsword 
{
mesh models/md5/weapons/broadsword/broadsword.md5mesh
offset (-10 0 -6.5 )
 
anim raise models/md5/weapons/broadsword/get.md5anim {
frame 1 sound_weapon sword_unsheath
}
anim idle  models/md5/weapons/broadsword/idle.md5anim
 
anim attack_LR models/md5/weapons/broadsword/slash_l2r.md5anim
{
frame 11 melee_hold
frame 12 sound snd_swing
frame 12 melee_attack_start meleeweap_r slash_lr
frame 20 melee_attack_stop meleeweap_r
}
anim attack_RL models/md5/weapons/broadsword/slash_r2l.md5anim
{
frame 11  melee_hold
frame 12 sound snd_swing
frame 12 melee_attack_start meleeweap_r slash_rl
frame 20 melee_attack_stop meleeweap_r
}
anim attack_Over models/md5/weapons/broadsword/slash_overhead.md5anim
{
frame 11 melee_hold
frame 12 sound snd_swing
frame 12 melee_attack_start meleeweap_r overhead
frame 21 melee_attack_stop meleeweap_r 
}
anim attack_Thrust models/md5/weapons/broadsword/thrust.md5anim
{
frame 11 melee_hold
frame 12 sound snd_swing
frame 12 melee_attack_start meleeweap_r thrust
frame 21 melee_attack_stop meleeweap_r
anim parry_RL models/md5/weapons/broadsword/parry_right2left.md5anim
{
frame 8 melee_parry_start meleeweap_r left
frame 10 melee_hold
frame 11 melee_parry_stop meleeweap_r
}
anim parry_LR models/md5/weapons/broadsword/parry_left2right.md5anim
{
frame 8 melee_parry_start meleeweap_r right
frame 10 melee_hold
frame 11 melee_parry_stop meleeweap_r
}
anim parry_Over models/md5/weapons/broadsword/parry_right.md5anim
{
frame 10 melee_parry_start meleeweap_r overhead
frame 12 melee_hold
frame 13 melee_parry_stop meleeweap_r
}
anim parry_Thrust models/md5/weapons/broadsword/parry_thrust.md5anim
{
// not the correct frame, just needed a pause for testing
frame 8 melee_parry_start meleeweap_r thrust
frame 10 melee_hold
frame 11 melee_parry_stop meleeweap_r
}
anim cancel_attack_RL models/md5/weapons/broadsword/cancel_r2l_attack.md5anim
{
frame 1 melee_attack_stop meleeweap_r
}
anim cancel_attack_LR models/md5/weapons/broadsword/cancel_l2r_attack.md5anim
{
frame 1 melee_attack_stop meleeweap_r
}
anim cancel_attack_Over  models/md5/weapons/broadsword/cancel_overhead_attack.md5anim
{
frame 1 melee_attack_stop meleeweap_r
}
anim cancel_attack_Thrust  models/md5/weapons/broadsword/cancel_thrust_attack.md5anim
{
frame 1 melee_attack_stop meleeweap_r
anim putaway  models/md5/weapons/broadsword/putaway.md5anim 
{
frame 17 sound_weapon sword_sheath
}
}
 
// new melee system
entityDef atdm:attachment_melee_shortsword
{
"inherit" "atdm:moveable_shortsword"
"spawnclass" "CMeleeWeapon"
// "joint" "r_wrist"
"joint" "sword"
// ? roll/yaw pitch
 
"angles" "0 -68 3"
"origin" "-2 -1 -1"
 
"hide" "1"
"solid" "0"
// necessary?
"clipmodel_contents" "0"
"frobable" "0"
"neverShow" "1" // grayman #2998 - never show this entity
"noshadows" "1" // grayman #2998
 
// if we hit a moveable below this mass, we continue the swing
"stop_mass" "8"
 
// attacks:
 
"att_type_overhead"  "0" // overhead
"att_world_collide_overhead" "1"
"def_damage_overhead" "melee_shortsword_ovr"
"att_mod_cm_overhead" "1"
"att_cm_maxs_overhead" "1 45 1"
"att_cm_mins_overhead" "-1 6 -1"
 
"att_type_slash_lr"  "1" // left to right
"att_world_collide_slash_lr" "1"
"def_damage_slash_lr" "melee_shortsword_lr"
"att_mod_cm_slash_lr" "1"
"att_cm_maxs_slash_lr" "1 45 1"
"att_cm_mins_slash_lr" "-1 6 -1"
 
"att_type_slash_rl"  "2" // right to left
"att_world_collide_slash_rl" "1"
"def_damage_slash_rl" "melee_shortsword_rl"
"att_mod_cm_slash_rl" "1"
"att_cm_maxs_slash_rl" "1 45 1"
"att_cm_mins_slash_rl" "-1 6 -1"
 
"att_type_thrust"  "3" // thrust
"att_world_collide_thrust" "1"
"def_damage_thrust" "melee_shortsword_thrust"
"att_mod_cm_thrust" "1"
 
// "att_cm_maxs_thrust" "1 42 1"
// "att_cm_mins_thrust" "-1 32 -1"
// ishtvan: Lined thrust up vertically with extended tip
"att_cm_maxs_thrust" "-1 42 -2"
"att_cm_mins_thrust" "-3 32 -4"
 
// Failsafe trace along long axis of CM
// for fixing buggy trace when CM starts out intersecting
"att_failsafe_trace_thrust" "1"
// player can lean, putting sword hilt thru walls
// so make sure trace starts back farther
"att_failsafe_trace_start_thrust" "0 -20 0"
"att_failsafe_trace_end_thrust" "0 42 0"
 
// parries:
 
"par_type_overhead"  "0" // overhead
"par_mod_cm_overhead" "1"
"par_cm_maxs_overhead" "20 40 20"
"par_cm_mins_overhead" "-20 0 -20"
 
"par_type_left"  "2" // left parry blocks right to left
"par_mod_cm_left" "1"
"par_cm_maxs_left" "20 40 20"
"par_cm_mins_left" "-20 -35  -20"
 
"par_type_right"  "1" // right parry blocks left to right
"par_mod_cm_right" "1"
"par_cm_maxs_right" "20 40 20"
"par_cm_mins_right" "-20 -35 -20"
 
"par_type_thrust"  "3" // thrust
"par_mod_cm_thrust" "1"
// works (sort of)
// right/left, forward/back, u/down
// always parries builder guard, but not pro guard
"par_cm_maxs_thrust" "25 50 75"
"par_cm_mins_thrust" "-60 -50 -40"
 
// sort of works for new skeleton, but not for old
// "par_cm_maxs_thrust" "35 53 250"
// "par_cm_mins_thrust" "-200 -50 -140"
// test:
"par_cm_yaw_only_thrust" "1"
}

  • RPGista likes this

Alberic is my sparring partner.

Whaddya mean, smiley faces aren't punctuation :huh:


#187 SirGen

SirGen

    Member

  • Member
  • PipPip
  • 326 posts

Posted 03 January 2015 - 06:05 PM

^Sorry for taking up so much real estate :wacko:  I'm not sure why my spoiler tags aren't working properly.


Alberic is my sparring partner.

Whaddya mean, smiley faces aren't punctuation :huh:


#188 demagogue

demagogue

    Mod hero

  • Active Developer
  • PipPipPipPipPip
  • 5502 posts

Posted 04 January 2015 - 12:42 PM

You could put the text in a Google doc then just post the links to it here.

My FM Patently Dangerous has a show down with the main bad guy in it. I wouldn't call it a boss battle per se, but it feels good to fight him.
Posted Image

#189 RPGista

RPGista

    Advanced Member

  • Member
  • PipPipPip
  • 1665 posts

Posted 04 January 2015 - 08:48 PM

Sirgen - thanks a lot man, to tell you the truth, I hadnt played with tdm's def files at the time i was editting stuff, so I missed all those files but i now see they are well commented, and your experiments with tweaking might just make for a good inspiration for a branch research into improving all the melee stats for experienced players. It would be a cool project to undertake, but I'll be damned if i have time for any hobbies these days. Lets see. Either way, thanks a lot for sharing your findings here!

And I strongly recommend playing Demagoge's mission, for sure.




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users