Attached Files |
-
builderMultipliers.patch (5,899 bytes) 2007-04-18 11:10
Index: rts/Sim/Units/UnitDef.h
===================================================================
--- rts/Sim/Units/UnitDef.h (revision 3637)
+++ rts/Sim/Units/UnitDef.h (working copy)
@@ -94,6 +94,11 @@
float buildSpeed;
float buildDistance;
float mass;
+
+ float reclaimMult;
+ float repairMult;
+ float captureMult;
+ float resurrectMult;
float minCollisionSpeed;
float slideTolerance;
Index: rts/Sim/Units/UnitDefHandler.cpp
===================================================================
--- rts/Sim/Units/UnitDefHandler.cpp (revision 3637)
+++ rts/Sim/Units/UnitDefHandler.cpp (working copy)
@@ -338,6 +338,10 @@
ud.buildSpeed=atof(tdfparser.SGetValueDef("0", "UNITINFO\\WorkerTime").c_str());
ud.buildDistance=atof(tdfparser.SGetValueDef("64", "UNITINFO\\Builddistance").c_str());
ud.buildDistance=std::max(128.f,ud.buildDistance);
+ ud.repairMult=atof(tdfparser.SGetValueDef("1", "UNITINFO\\RepairMult").c_str());
+ ud.reclaimMult=atof(tdfparser.SGetValueDef("1", "UNITINFO\\ReclaimMult").c_str());
+ ud.captureMult=atof(tdfparser.SGetValueDef("1", "UNITINFO\\CaptureMult").c_str());
+ ud.resurrectMult=atof(tdfparser.SGetValueDef("1", "UNITINFO\\ResurrectMult").c_str());
ud.armoredMultiple=atof(tdfparser.SGetValueDef("1", "UNITINFO\\DamageModifier").c_str());
ud.armorType=damageArrayHandler->GetTypeFromName(ud.name);
// logOutput.Print("unit %s has armor %i",ud.name.c_str(),ud.armorType);
Index: rts/Sim/Units/UnitTypes/Builder.cpp
===================================================================
--- rts/Sim/Units/UnitTypes/Builder.cpp (revision 3637)
+++ rts/Sim/Units/UnitTypes/Builder.cpp (working copy)
@@ -31,6 +31,10 @@
CR_REG_METADATA(CBuilder, (
CR_MEMBER(buildSpeed),
CR_MEMBER(buildDistance),
+ CR_MEMBER(repairMult),
+ CR_MEMBER(reclaimMult),
+ CR_MEMBER(resurrectMult),
+ CR_MEMBER(captureMult),
CR_MEMBER(curResurrect),
CR_MEMBER(lastResurrected),
CR_MEMBER(curBuild),
@@ -54,6 +58,10 @@
CBuilder::CBuilder()
: buildSpeed(100),
buildDistance(16),
+ repairMult(0),
+ reclaimMult(0),
+ resurrectMult(0),
+ captureMult(0),
curBuild(0),
curReclaim(0),
terraforming(false),
@@ -82,6 +90,10 @@
{
buildSpeed=def->buildSpeed/32.0f;
buildDistance=def->buildDistance;
+ repairMult=def->repairMult;
+ reclaimMult=def->reclaimMult;
+ resurrectMult=def->resurrectMult;
+ captureMult=def->captureMult;
CUnit::UnitInit (def, team, position);
}
@@ -178,11 +190,24 @@
if(inBuildStance){
isCloaked=false;
curCloakTimeout=gs->frameNum+cloakTimeout;
- if(curBuild->AddBuildPower(buildSpeed,this)){
- CreateNanoParticle(curBuild->midPos,curBuild->radius*0.5f,false);
+ //Check to see if we are building a new thing or repairing an existing thing
+ if(curBuild->buildProgress<1){
+ //building new thing
+ if(curBuild->AddBuildPower(buildSpeed,this)){
+ CreateNanoParticle(curBuild->midPos,curBuild->radius*0.5f,false);
+ } else {
+ if(!curBuild->beingBuilt && curBuild->health>=curBuild->maxHealth){
+ StopBuild();
+ }
+ }
} else {
- if(!curBuild->beingBuilt && curBuild->health>=curBuild->maxHealth){
- StopBuild();
+ //repairing something
+ if(curBuild->AddBuildPower(buildSpeed*repairMult,this)){
+ CreateNanoParticle(curBuild->midPos,curBuild->radius*0.5f,false);
+ } else {
+ if(!curBuild->beingBuilt && curBuild->health>=curBuild->maxHealth){
+ StopBuild();
+ }
}
}
} else {
@@ -191,7 +216,7 @@
} else if(curReclaim && curReclaim->pos.distance2D(pos)<buildDistance+curReclaim->radius && inBuildStance){
isCloaked=false;
curCloakTimeout=gs->frameNum+cloakTimeout;
- if(curReclaim->AddBuildPower(-buildSpeed,this)){
+ if(curReclaim->AddBuildPower(-buildSpeed*reclaimMult,this)){
CreateNanoParticle(curReclaim->midPos,curReclaim->radius*0.7f,true);
}
} else if(curResurrect && curResurrect->pos.distance2D(pos)<buildDistance+curResurrect->radius && inBuildStance){
@@ -201,13 +226,13 @@
{
// This corpse has been reclaimed a little, need to restore the resources
// before we can let the player resurrect it.
- curResurrect->AddBuildPower(buildSpeed,this);
+ curResurrect->AddBuildPower(buildSpeed*repairMult,this);
}
else
{
// Corpse has been restored, begin resurrection
- if(UseEnergy(ud->energyCost*buildSpeed/ud->buildTime*0.5f)){
- curResurrect->resurrectProgress+=buildSpeed/ud->buildTime;
+ if(UseEnergy(ud->energyCost*buildSpeed*resurrectMult/ud->buildTime*0.5f)){
+ curResurrect->resurrectProgress+=buildSpeed*resurrectMult/ud->buildTime;
CreateNanoParticle(curResurrect->midPos,curResurrect->radius*0.7f,gs->randInt()&1);
}
if(curResurrect->resurrectProgress>1){ //resurrect finished
@@ -227,7 +252,7 @@
}
} else if(curCapture && curCapture->pos.distance2D(pos)<buildDistance+curCapture->radius && inBuildStance){
if(curCapture->team!=team){
- curCapture->captureProgress+=1.0f/(150+curCapture->buildTime/buildSpeed*(curCapture->health+curCapture->maxHealth)/curCapture->maxHealth*0.4f);
+ curCapture->captureProgress+=1.0f/(150+curCapture->buildTime/(buildSpeed*captureMult)*(curCapture->health+curCapture->maxHealth)/curCapture->maxHealth*0.4f);
CreateNanoParticle(curCapture->midPos,curCapture->radius*0.7f,false);
if(curCapture->captureProgress > 1.0f){
if (!curCapture->ChangeTeam(team, CUnit::ChangeCaptured)) {
Index: rts/Sim/Units/UnitTypes/Builder.h
===================================================================
--- rts/Sim/Units/UnitTypes/Builder.h (revision 3637)
+++ rts/Sim/Units/UnitTypes/Builder.h (working copy)
@@ -36,6 +36,11 @@
float buildSpeed;
float buildDistance;
+ float repairMult;
+ float reclaimMult;
+ float resurrectMult;
+ float captureMult;
+
CFeature* curResurrect;
int lastResurrected;
CUnit* curBuild;
-
builderMultipliers2.patch (6,503 bytes) 2007-04-19 07:53
Index: rts/Lua/LuaUnitDefs.cpp
===================================================================
--- rts/Lua/LuaUnitDefs.cpp (revision 3639)
+++ rts/Lua/LuaUnitDefs.cpp (working copy)
@@ -722,6 +722,11 @@
ADD_FLOAT("buildSpeed", ud.buildSpeed);
ADD_FLOAT("buildDistance", ud.buildDistance);
+ ADD_FLOAT("repairMult", ud.repairMult);
+ ADD_FLOAT("reclaimMult", ud.reclaimMult);
+ ADD_FLOAT("resurrectMult", ud.resurrectMult);
+ ADD_FLOAT("captureMult", ud.captureMult);
+
ADD_BOOL("canSubmerge", ud.canSubmerge);
ADD_BOOL("canFly", ud.canfly);
ADD_BOOL("canMove", ud.canmove);
Index: rts/Sim/Units/UnitDef.h
===================================================================
--- rts/Sim/Units/UnitDef.h (revision 3639)
+++ rts/Sim/Units/UnitDef.h (working copy)
@@ -94,6 +94,11 @@
float buildSpeed;
float buildDistance;
float mass;
+
+ float reclaimMult;
+ float repairMult;
+ float captureMult;
+ float resurrectMult;
float minCollisionSpeed;
float slideTolerance;
Index: rts/Sim/Units/UnitDefHandler.cpp
===================================================================
--- rts/Sim/Units/UnitDefHandler.cpp (revision 3639)
+++ rts/Sim/Units/UnitDefHandler.cpp (working copy)
@@ -338,6 +338,10 @@
ud.buildSpeed=atof(tdfparser.SGetValueDef("0", "UNITINFO\\WorkerTime").c_str());
ud.buildDistance=atof(tdfparser.SGetValueDef("64", "UNITINFO\\Builddistance").c_str());
ud.buildDistance=std::max(128.f,ud.buildDistance);
+ ud.repairMult=atof(tdfparser.SGetValueDef("1", "UNITINFO\\RepairMult").c_str());
+ ud.reclaimMult=atof(tdfparser.SGetValueDef("1", "UNITINFO\\ReclaimMult").c_str());
+ ud.captureMult=atof(tdfparser.SGetValueDef("1", "UNITINFO\\CaptureMult").c_str());
+ ud.resurrectMult=atof(tdfparser.SGetValueDef("1", "UNITINFO\\ResurrectMult").c_str());
ud.armoredMultiple=atof(tdfparser.SGetValueDef("1", "UNITINFO\\DamageModifier").c_str());
ud.armorType=damageArrayHandler->GetTypeFromName(ud.name);
// logOutput.Print("unit %s has armor %i",ud.name.c_str(),ud.armorType);
Index: rts/Sim/Units/UnitTypes/Builder.cpp
===================================================================
--- rts/Sim/Units/UnitTypes/Builder.cpp (revision 3639)
+++ rts/Sim/Units/UnitTypes/Builder.cpp (working copy)
@@ -31,6 +31,10 @@
CR_REG_METADATA(CBuilder, (
CR_MEMBER(buildSpeed),
CR_MEMBER(buildDistance),
+ CR_MEMBER(repairMult),
+ CR_MEMBER(reclaimMult),
+ CR_MEMBER(resurrectMult),
+ CR_MEMBER(captureMult),
CR_MEMBER(curResurrect),
CR_MEMBER(lastResurrected),
CR_MEMBER(curBuild),
@@ -54,6 +58,10 @@
CBuilder::CBuilder()
: buildSpeed(100),
buildDistance(16),
+ repairMult(0),
+ reclaimMult(0),
+ resurrectMult(0),
+ captureMult(0),
curBuild(0),
curReclaim(0),
terraforming(false),
@@ -82,6 +90,10 @@
{
buildSpeed=def->buildSpeed/32.0f;
buildDistance=def->buildDistance;
+ repairMult=def->repairMult;
+ reclaimMult=def->reclaimMult;
+ resurrectMult=def->resurrectMult;
+ captureMult=def->captureMult;
CUnit::UnitInit (def, team, position);
}
@@ -178,11 +190,24 @@
if(inBuildStance){
isCloaked=false;
curCloakTimeout=gs->frameNum+cloakTimeout;
- if(curBuild->AddBuildPower(buildSpeed,this)){
- CreateNanoParticle(curBuild->midPos,curBuild->radius*0.5f,false);
+ //Check to see if we are building a new thing or repairing an existing thing
+ if(curBuild->buildProgress<1){
+ //building new thing
+ if(curBuild->AddBuildPower(buildSpeed,this)){
+ CreateNanoParticle(curBuild->midPos,curBuild->radius*0.5f,false);
+ } else {
+ if(!curBuild->beingBuilt && curBuild->health>=curBuild->maxHealth){
+ StopBuild();
+ }
+ }
} else {
- if(!curBuild->beingBuilt && curBuild->health>=curBuild->maxHealth){
- StopBuild();
+ //repairing something
+ if(curBuild->AddBuildPower(buildSpeed*repairMult,this)){
+ CreateNanoParticle(curBuild->midPos,curBuild->radius*0.5f,false);
+ } else {
+ if(!curBuild->beingBuilt && curBuild->health>=curBuild->maxHealth){
+ StopBuild();
+ }
}
}
} else {
@@ -191,7 +216,7 @@
} else if(curReclaim && curReclaim->pos.distance2D(pos)<buildDistance+curReclaim->radius && inBuildStance){
isCloaked=false;
curCloakTimeout=gs->frameNum+cloakTimeout;
- if(curReclaim->AddBuildPower(-buildSpeed,this)){
+ if(curReclaim->AddBuildPower(-buildSpeed*reclaimMult,this)){
CreateNanoParticle(curReclaim->midPos,curReclaim->radius*0.7f,true);
}
} else if(curResurrect && curResurrect->pos.distance2D(pos)<buildDistance+curResurrect->radius && inBuildStance){
@@ -201,13 +226,13 @@
{
// This corpse has been reclaimed a little, need to restore the resources
// before we can let the player resurrect it.
- curResurrect->AddBuildPower(buildSpeed,this);
+ curResurrect->AddBuildPower(buildSpeed*repairMult,this);
}
else
{
// Corpse has been restored, begin resurrection
- if(UseEnergy(ud->energyCost*buildSpeed/ud->buildTime*0.5f)){
- curResurrect->resurrectProgress+=buildSpeed/ud->buildTime;
+ if(UseEnergy(ud->energyCost*buildSpeed*resurrectMult/ud->buildTime*0.5f)){
+ curResurrect->resurrectProgress+=buildSpeed*resurrectMult/ud->buildTime;
CreateNanoParticle(curResurrect->midPos,curResurrect->radius*0.7f,gs->randInt()&1);
}
if(curResurrect->resurrectProgress>1){ //resurrect finished
@@ -227,7 +252,7 @@
}
} else if(curCapture && curCapture->pos.distance2D(pos)<buildDistance+curCapture->radius && inBuildStance){
if(curCapture->team!=team){
- curCapture->captureProgress+=1.0f/(150+curCapture->buildTime/buildSpeed*(curCapture->health+curCapture->maxHealth)/curCapture->maxHealth*0.4f);
+ curCapture->captureProgress+=1.0f/(150+curCapture->buildTime/(buildSpeed*captureMult)*(curCapture->health+curCapture->maxHealth)/curCapture->maxHealth*0.4f);
CreateNanoParticle(curCapture->midPos,curCapture->radius*0.7f,false);
if(curCapture->captureProgress > 1.0f){
if (!curCapture->ChangeTeam(team, CUnit::ChangeCaptured)) {
Index: rts/Sim/Units/UnitTypes/Builder.h
===================================================================
--- rts/Sim/Units/UnitTypes/Builder.h (revision 3639)
+++ rts/Sim/Units/UnitTypes/Builder.h (working copy)
@@ -36,6 +36,11 @@
float buildSpeed;
float buildDistance;
+ float repairMult;
+ float reclaimMult;
+ float resurrectMult;
+ float captureMult;
+
CFeature* curResurrect;
int lastResurrected;
CUnit* curBuild;
|
---|