SelfWorkerTime, CanBeAssisted and more - Page 2

SelfWorkerTime, CanBeAssisted and more

Requests for features in the spring code.

Moderator: Moderators

User avatar
yuritch
Spring 1944 Developer
Posts: 1018
Joined: 11 Oct 2005, 07:18

Post by yuritch »

Lua bindings, you say? Like this?

Code: Select all

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;
This should add the 4 new variables to Lua UnitDefs.
imbaczek
Posts: 3629
Joined: 22 Aug 2006, 16:19

Post by imbaczek »

Guess so :)
trepan
Former Engine Dev
Posts: 1200
Joined: 17 Nov 2005, 00:52

Post by trepan »

Committed yuritch's patch (with some updates, r3650).

Yuritch ... no need to spam your patch here if you're
going to paste it on Mantis (devs won't generally use
patches pasted here anyways, whitespace ;))
trepan
Former Engine Dev
Posts: 1200
Joined: 17 Nov 2005, 00:52

Post by trepan »

Update:

Code: Select all

Last modification: Rev 3653 - trepan - 2007-04-21 06:20:41 +0200 (Sat, 21 Apr 2007)
Log message:
  * Replaced the following multipliers with absolute values:
    - repairMult    -> repairSpeed
    - reclaimMult   -> reclaimSpeed
    - resurrectMult -> resurrectSpeed
    - captureMult   -> captureSpeed
  * Added the 'terraformSpeed' FBI tag
User avatar
KDR_11k
Game Developer
Posts: 8293
Joined: 25 Jun 2006, 08:44

Post by KDR_11k »

WHEEEEEEEEEEEE!
Post Reply

Return to “Feature Requests”