176 lines
4.6 KiB
C++
176 lines
4.6 KiB
C++
|
#include "g_local.h"
|
|||
|
|
|||
|
CPlayerSkill skillStats [NUM_SKILL_LEVELS] =
|
|||
|
{ // dodge aimMaxDist WanderAmount PlayerMaxEncumbrance ArmorModifier SpawnLull SpawnForceTime canCheat Saves TurnSpeed
|
|||
|
// accuracy Hesitation PlayerDamage AmmoModifier SpawnFrequency SpawnNonLull SpawnMaxNearbyGuys SpawnMinTime fullHealth
|
|||
|
CPlayerSkill( .3f, .25f, 0.4f, 3.0, .5f, .15f, 0, 2.0, 2.0, 0.0, 0, 0, 0, 0, 1, 0.0, -1, .5, 1), //EXTREMELY EASY
|
|||
|
CPlayerSkill( .5f, .4f, 0.5f, 1.5f, 1.0, .3f, 10, 1.0, 1.0, .3, 10, 4, 2, 2, 1, 15.0, 8, .5, 1), //EASY
|
|||
|
CPlayerSkill( 1.0, 0.6f, 0.8f, 1.0f, 1.0, .4f, 7, 1.0, 1.0, .85, 10, 4, 1, 3, 1, 8.0, 5, 1.0, 0), //STANDARD
|
|||
|
CPlayerSkill( 3, 0.8f, 1.0f, 0.7f, 1.0, .6f, 5, 1.0, 1.0, 1.0, 12, 6, 1, 3, 0, 6.0, 2, 1.5, 0), //DIFFICULT
|
|||
|
CPlayerSkill( 99.0, 1.5f, 2.5f, 0.2f, 99.0, 1.0, 5, 5.0, .5f, 3.0, 4, 12, .5, 4, 0, 2.0, 0, 3, 0), //EXTREMELY DIICULT
|
|||
|
};
|
|||
|
|
|||
|
// lower hesitations make the game more exciting
|
|||
|
|
|||
|
CPlayerSkill::CPlayerSkill(float newaiDodgeFrequency, float newaiAccuracy, float newaiAimMaxDist, float newaiHesitation,
|
|||
|
float newaiWanderAmount, float newplayerDamage, int newplayerMaxEncumbrance, float newammoModifier,
|
|||
|
float newarmorModifier, float newspawnFrequency, float newspawnLullTime, float newspawnNonLullTime,
|
|||
|
float newspawnForceTime, float newspawnMaxGuys, int newcanCheat, float newspawnMinTime, int newNumberOfSaves,
|
|||
|
float newaiTurnSpeed, int newfullHealth)
|
|||
|
{
|
|||
|
// fixme - aiWanderAmount is currently not implemented
|
|||
|
|
|||
|
aiDodgeFrequency = newaiDodgeFrequency;
|
|||
|
aiAccuracy = newaiAccuracy;
|
|||
|
aiAimMaxDist = newaiAimMaxDist;
|
|||
|
aiHesitation = newaiHesitation;
|
|||
|
aiWanderAmount = newaiWanderAmount;
|
|||
|
aiTurnSpeed = newaiTurnSpeed;
|
|||
|
|
|||
|
playerDamage = newplayerDamage;
|
|||
|
playerMaxEncumbrance = newplayerMaxEncumbrance;
|
|||
|
ammoModifier = newammoModifier;
|
|||
|
armorModifier = newarmorModifier;
|
|||
|
|
|||
|
spawnFrequency = newspawnFrequency;
|
|||
|
spawnLullTime = newspawnLullTime;
|
|||
|
spawnNonLullTime = newspawnNonLullTime;
|
|||
|
spawnForceTime = newspawnForceTime;
|
|||
|
spawnMaxGuys = newspawnMaxGuys;
|
|||
|
cheatsAvailable = newcanCheat;
|
|||
|
spawnMinTime = newspawnMinTime;
|
|||
|
numberOfSaves = newNumberOfSaves;
|
|||
|
|
|||
|
fullHealth = newfullHealth;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
|
|||
|
Saves
|
|||
|
Set with sk_saving
|
|||
|
Unlimited
|
|||
|
<EFBFBD>
|
|||
|
2
|
|||
|
1
|
|||
|
0
|
|||
|
|
|||
|
Spawning
|
|||
|
Set with sk_spawning
|
|||
|
None (0)
|
|||
|
Light (1)
|
|||
|
Standard (2)
|
|||
|
Heavy (3)
|
|||
|
Ridiculous (4)
|
|||
|
|
|||
|
Enemy Toughness
|
|||
|
Set with sk_toughness
|
|||
|
Non-Threatening (0)
|
|||
|
Uncertain (1)
|
|||
|
Standard (2)
|
|||
|
Aggressive (3)
|
|||
|
Bloodthirsty (4)
|
|||
|
|
|||
|
*/
|
|||
|
|
|||
|
void CPlayerSkill::buildCustomSkillLevels(void)
|
|||
|
{
|
|||
|
// build 'em all now
|
|||
|
|
|||
|
numberOfSaves = sk_saving->value;
|
|||
|
cheatsAvailable = sv_cheats->value;
|
|||
|
|
|||
|
spawnValue = sk_spawning->value;
|
|||
|
if(spawnValue < 0)spawnValue = 0;
|
|||
|
if(spawnValue > 4)spawnValue = 4;
|
|||
|
spawnFrequency = skillStats[spawnValue].spawnFrequency;
|
|||
|
spawnLullTime = skillStats[spawnValue].spawnLullTime;
|
|||
|
spawnNonLullTime = skillStats[spawnValue].spawnNonLullTime;
|
|||
|
spawnForceTime = skillStats[spawnValue].spawnForceTime;
|
|||
|
spawnMaxGuys = skillStats[spawnValue].spawnMaxGuys;
|
|||
|
spawnMinTime = skillStats[spawnValue].spawnMinTime;
|
|||
|
ammoModifier = skillStats[spawnValue].ammoModifier; //this is pretty spawn related
|
|||
|
|
|||
|
enemyValue = sk_toughness->value;
|
|||
|
if(enemyValue < 0)enemyValue = 0;
|
|||
|
if(enemyValue > 4)enemyValue = 4;
|
|||
|
aiDodgeFrequency = skillStats[enemyValue].aiDodgeFrequency;
|
|||
|
aiAccuracy = skillStats[enemyValue].aiAccuracy;
|
|||
|
aiAimMaxDist = skillStats[enemyValue].aiAimMaxDist;
|
|||
|
aiHesitation = skillStats[enemyValue].aiHesitation;
|
|||
|
aiWanderAmount = skillStats[enemyValue].aiWanderAmount;
|
|||
|
aiTurnSpeed = skillStats[enemyValue].aiTurnSpeed;
|
|||
|
playerDamage = skillStats[enemyValue].playerDamage;
|
|||
|
armorModifier = skillStats[enemyValue].armorModifier;
|
|||
|
fullHealth = skillStats[enemyValue].fullHealth;
|
|||
|
|
|||
|
int encumidx=sk_maxencum->value;
|
|||
|
if(encumidx<0)encumidx=0;
|
|||
|
if(encumidx>4)encumidx=4;
|
|||
|
playerMaxEncumbrance = skillStats[encumidx].playerMaxEncumbrance;
|
|||
|
}
|
|||
|
|
|||
|
float CPlayerSkill::getMoneyMultiplier(void)
|
|||
|
{
|
|||
|
float val = 1;
|
|||
|
|
|||
|
if(numberOfSaves == -1)
|
|||
|
{
|
|||
|
val *= .4;
|
|||
|
}
|
|||
|
else if(!numberOfSaves)
|
|||
|
{
|
|||
|
val *= 2;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
val -= numberOfSaves * .05;
|
|||
|
}
|
|||
|
|
|||
|
if(cheatsAvailable)
|
|||
|
{
|
|||
|
val *= .5;
|
|||
|
}
|
|||
|
|
|||
|
if(!spawnValue)
|
|||
|
{
|
|||
|
val *= .3;
|
|||
|
}
|
|||
|
else if(spawnValue == 4)
|
|||
|
{
|
|||
|
val *= 4;//this is silly
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
val += spawnValue * .3;
|
|||
|
}
|
|||
|
|
|||
|
if(!enemyValue)
|
|||
|
{
|
|||
|
val *= .3;
|
|||
|
}
|
|||
|
else if(enemyValue == 4)
|
|||
|
{ //this is very painful
|
|||
|
val *= 3;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
val += enemyValue * .4;
|
|||
|
}
|
|||
|
|
|||
|
if(!playerMaxEncumbrance)
|
|||
|
{
|
|||
|
val *= .5;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
val *= 10.0 / playerMaxEncumbrance;
|
|||
|
}
|
|||
|
|
|||
|
if(val < .2)
|
|||
|
{
|
|||
|
val = .2;
|
|||
|
}
|
|||
|
|
|||
|
return val;
|
|||
|
}
|