stratagus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Stratagus-CVS] stratagus/src/action action_repair.c action_res...


From: Jimmy Salmon
Subject: [Stratagus-CVS] stratagus/src/action action_repair.c action_res...
Date: Fri, 03 Oct 2003 18:16:26 -0400

CVSROOT:        /cvsroot/stratagus
Module name:    stratagus
Branch:         
Changes by:     Jimmy Salmon <address@hidden>   03/10/03 18:16:26

Modified files:
        src/action     : action_repair.c action_research.c 
                         action_resource.c 

Log message:
        Cleanup

Patches:
Index: stratagus/src/action/action_repair.c
diff -u stratagus/src/action/action_repair.c:1.54 
stratagus/src/action/action_repair.c:1.55
--- stratagus/src/action/action_repair.c:1.54   Sun Sep 21 08:13:41 2003
+++ stratagus/src/action/action_repair.c        Fri Oct  3 18:16:26 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: action_repair.c,v 1.54 2003/09/21 12:13:41 mr-russ Exp $
+//     $Id: action_repair.c,v 1.55 2003/10/03 22:16:26 jsalmon3 Exp $
 
 //@{
 
@@ -59,18 +59,18 @@
 **     @param unit     Unit, for that the repair animation is played.
 **     @param repair   Repair animation.
 */
-local void DoActionRepairGeneric(Unit* unit,const Animation* repair)
+local void DoActionRepairGeneric(Unit* unit, const Animation* repair)
 {
     int flags;
 
-    flags=UnitShowAnimation(unit,repair);
+    flags = UnitShowAnimation(unit, repair);
 
 #ifdef WITH_SOUND
-    if( (flags&AnimationSound) ) {
-       if( GameSounds.Repair.Sound==(void*)-1 ) {
-           PlayUnitSound(unit,VoiceAttacking);
+    if ((flags & AnimationSound)) {
+       if (GameSounds.Repair.Sound == (void*)-1) {
+           PlayUnitSound(unit, VoiceAttacking);
        } else {
-           PlayUnitSound(unit,VoiceRepair);
+           PlayUnitSound(unit, VoiceRepair);
        }
     }
 #endif
@@ -95,21 +95,21 @@
 
     player = unit->Player;
 
-    if 
(goal->Orders[0].Action!=UnitActionBuilded||(!goal->Type->BuilderOutside)) {
+    if (goal->Orders[0].Action != UnitActionBuilded || 
(!goal->Type->BuilderOutside)) {
        //
        //  Calculate the repair costs.
        //
        DebugCheck(!goal->Stats->HitPoints);
 
-
        //
        //  Check if enough resources are available
        //
        for (i = 1; i < MaxCosts; ++i) {
            if (player->Resources[i] < goal->Type->RepairCosts[i]) {
-               snprintf(buf,100,"We need more %s for 
repair!",DefaultResourceNames[i]);
-               NotifyPlayer(player, NotifyYellow, unit->X, unit->Y,buf);
-               if( player->Ai ) {
+               snprintf(buf, 100, "We need more %s for repair!",
+                   DefaultResourceNames[i]);
+               NotifyPlayer(player, NotifyYellow, unit->X, unit->Y, buf);
+               if (player->Ai) {
                    // FIXME: call back to AI?
                    RefsDebugCheck(!goal->Refs);
                    if (!--goal->Refs) {
@@ -137,25 +137,25 @@
     //
     if (goal->Type->BuilderOutside) {
        //  hp is the current damage taken by the unit.
-       hp=(goal->Data.Builded.Progress*goal->Stats->HitPoints)/
-               (goal->Type->Stats->Costs[TimeCost]*600)-goal->HP;
+       hp = (goal->Data.Builded.Progress * goal->Stats->HitPoints) /
+           (goal->Type->Stats->Costs[TimeCost] * 600) - goal->HP;
        //
        //  Calculate the length of the attack (repair) anim.
        //
-       animlength=0;
-       for 
(anim=unit->Type->Animations->Attack;!(anim->Flags&AnimationReset);anim++) {
-           animlength+=anim->Sleep;
+       animlength = 0;
+       for (anim = unit->Type->Animations->Attack; !(anim->Flags & 
AnimationReset); ++anim) {
+           animlength += anim->Sleep;
        }
 
        DebugLevel3("Repair animation is %d cycles long\n" _C_ animlength);
        // FIXME: implement this below:
        //unit->Data.Builded.Worker->Type->BuilderSpeedFactor;
-       goal->Data.Builded.Progress+=100*animlength*SpeedBuild;
+       goal->Data.Builded.Progress += 100 * animlength * SpeedBuild;
        //  Keep the same level of damage while increasing HP.
-       goal->HP=(goal->Data.Builded.Progress*goal->Stats->HitPoints)/
-               (goal->Type->Stats->Costs[TimeCost]*600)-hp;
-       if (goal->HP>goal->Stats->HitPoints) {
-           goal->HP=goal->Stats->HitPoints;
+       goal->HP = (goal->Data.Builded.Progress * goal->Stats->HitPoints) /
+           (goal->Type->Stats->Costs[TimeCost] * 600) - hp;
+       if (goal->HP > goal->Stats->HitPoints) {
+           goal->HP = goal->Stats->HitPoints;
        }
        //  HandleActionBuilded will deal with most stuff.
     } else {
@@ -180,10 +180,10 @@
 */
 local int AnimateActionRepair(Unit* unit)
 {
-    if( unit->Type->Animations ) {
-       DebugCheck( !unit->Type->Animations->Attack );
+    if (unit->Type->Animations) {
+       DebugCheck(!unit->Type->Animations->Attack);
        // FIXME: A seperate repair animation would be nice?
-       DoActionRepairGeneric(unit,unit->Type->Animations->Attack);
+       DoActionRepairGeneric(unit, unit->Type->Animations->Attack);
     }
 
     return 0;
@@ -199,10 +199,10 @@
     Unit* goal;
     int err;
 
-    switch( unit->SubAction ) {
+    switch( unit->SubAction) {
        case 0:
            NewResetPath(unit);
-           unit->SubAction=1;
+           unit->SubAction = 1;
            // FALL THROUGH
        //
        //      Move near to target.
@@ -210,77 +210,77 @@
        case 1:
            // FIXME: RESET FIRST!! Why? We move first and than check if
            // something is in sight.
-           err=DoActionMove(unit);
-           if( unit->Reset ) {
+           err = DoActionMove(unit);
+           if (unit->Reset) {
                //
                //      No goal: if meeting damaged building repair it.
                //
-               goal=unit->Orders[0].Goal;
+               goal = unit->Orders[0].Goal;
 
                //
                //      Target is dead, choose new one.
                //
                // Check if goal is correct unit.
                // FIXME: should I do a function for this?
-               if( goal ) {
-                   if( goal->Destroyed ) {
+               if (goal) {
+                   if (goal->Destroyed) {
                        DebugLevel0Fn("destroyed unit\n");
-                       unit->Orders[0].X=goal->X;
-                       unit->Orders[0].Y=goal->Y;
-                       RefsDebugCheck( !goal->Refs );
-                       if( !--goal->Refs ) {
+                       unit->Orders[0].X = goal->X;
+                       unit->Orders[0].Y = goal->Y;
+                       RefsDebugCheck(!goal->Refs);
+                       if (!--goal->Refs) {
                            ReleaseUnit(goal);
                        }
                        // FIXME: should I clear this here?
-                       unit->Orders[0].Goal=goal=NULL;
+                       unit->Orders[0].Goal = goal = NULL;
                        NewResetPath(unit);
-                   } else if( !goal->HP
-                               || goal->Orders[0].Action==UnitActionDie
-                               || goal->HP > goal->Stats->HitPoints ) {
-                       unit->Orders[0].X=goal->X;
-                       unit->Orders[0].Y=goal->Y;
-                       RefsDebugCheck( !goal->Refs );
+                   } else if (!goal->HP ||
+                           goal->Orders[0].Action == UnitActionDie ||
+                           goal->HP > goal->Stats->HitPoints) {
+                       unit->Orders[0].X = goal->X;
+                       unit->Orders[0].Y = goal->Y;
+                       RefsDebugCheck(!goal->Refs);
                        --goal->Refs;
-                       RefsDebugCheck( !goal->Refs );
-                       unit->Orders[0].Goal=goal=NULL;
+                       RefsDebugCheck(!goal->Refs);
+                       unit->Orders[0].Goal = goal = NULL;
                        // FIXME: should I clear this here?
                        NewResetPath(unit);
                    }
-               } else if ( unit->Player->AiEnabled ) {
+               } else if (unit->Player->AiEnabled) {
                    // Ai players workers should stop if target is killed
-                   err=-1;
+                   err = -1;
                }
 
                //
                //      Have reached target? FIXME: could use return value
                //
-               
if(goal&&MapDistanceBetweenUnits(unit,goal)<=unit->Type->RepairRange
-                       &&goal->HP<goal->Type->Stats->HitPoints) {
-                   unit->State=0;
-                   unit->SubAction=2;
-                   unit->Reset=1;
+               if(goal && MapDistanceBetweenUnits(unit, goal) <= 
unit->Type->RepairRange &&
+                       goal->HP < goal->Type->Stats->HitPoints) {
+                   unit->State = 0;
+                   unit->SubAction = 2;
+                   unit->Reset = 1;
                    UnitHeadingFromDeltaXY(unit,
-                       goal->X+(goal->Type->TileWidth-1)/2-unit->X,
-                       goal->Y+(goal->Type->TileHeight-1)/2-unit->Y);
+                       goal->X + (goal->Type->TileWidth - 1) / 2 - unit->X,
+                       goal->Y + (goal->Type->TileHeight - 1) / 2 - unit->Y);
                    // FIXME: only if heading changes
                    CheckUnitToBeDrawn(unit);
-               } else if( err<0 ) {
-                   if( goal ) {                // release reference
-                       RefsDebugCheck( !goal->Refs );
+               } else if (err < 0) {
+                   if (goal) {         // release reference
+                       RefsDebugCheck(!goal->Refs);
                        goal->Refs--;
-                       RefsDebugCheck( !goal->Refs );
-                       unit->Orders[0].Goal=NoUnitP;
+                       RefsDebugCheck(!goal->Refs);
+                       unit->Orders[0].Goal = NoUnitP;
                    }
-                   unit->Orders[0].Action=UnitActionStill;
-                   unit->State=unit->SubAction=0;
-                   if( unit->Selected ) {      // update display for new action
+                   unit->Orders[0].Action = UnitActionStill;
+                   unit->State = unit->SubAction = 0;
+                   if (unit->Selected) {       // update display for new action
                        SelectedUnitChanged();
                    }
                    return;
                }
 
                // FIXME: Should be it already?
-               DebugCheck( unit->Orders[0].Action!=UnitActionRepair );
+               DebugCheck(unit->Orders[0].Action != UnitActionRepair);
            }
            break;
 
@@ -289,53 +289,53 @@
        //
        case 2:
            AnimateActionRepair(unit);
-           if( unit->Reset ) {
-               goal=unit->Orders[0].Goal;
+           if (unit->Reset) {
+               goal = unit->Orders[0].Goal;
 
                //
                //      Target is dead, choose new one.
                //
                // Check if goal is correct unit.
                // FIXME: should I do a function for this?
-               if( goal ) {
-                   if( goal->Destroyed ) {
+               if (goal) {
+                   if (goal->Destroyed) {
                        DebugLevel0Fn("destroyed unit\n");
-                       unit->Orders[0].X=goal->X;
-                       unit->Orders[0].Y=goal->Y;
-                       RefsDebugCheck( !goal->Refs );
-                       if( !--goal->Refs ) {
+                       unit->Orders[0].X = goal->X;
+                       unit->Orders[0].Y = goal->Y;
+                       RefsDebugCheck(!goal->Refs);
+                       if (!--goal->Refs) {
                            ReleaseUnit(goal);
                        }
                        // FIXME: should I clear this here?
-                       unit->Orders[0].Goal=goal=NULL;
+                       unit->Orders[0].Goal = goal = NULL;
                        NewResetPath(unit);
-                   } else if( !goal->HP
-                               || goal->Orders[0].Action==UnitActionDie ) {
+                   } else if (!goal->HP ||
+                           goal->Orders[0].Action == UnitActionDie) {
                        // FIXME: should I clear this here?
-                       unit->Orders[0].X=goal->X;
-                       unit->Orders[0].Y=goal->Y;
-                       unit->Orders[0].Goal=goal=NULL;
+                       unit->Orders[0].X = goal->X;
+                       unit->Orders[0].Y = goal->Y;
+                       unit->Orders[0].Goal = goal = NULL;
                        NewResetPath(unit);
                    }
                }
-               if( goal ) {
-                   RepairUnit(unit,goal);
-                   goal=unit->Orders[0].Goal;
+               if (goal) {
+                   RepairUnit(unit, goal);
+                   goal = unit->Orders[0].Goal;
                }
 
                //
                //      Target is fine, choose new one.
                //
-               if( !goal || goal->HP >= goal->Stats->HitPoints ) {
-                   if( goal ) {                // release reference
-                       RefsDebugCheck( !goal->Refs );
+               if (!goal || goal->HP >= goal->Stats->HitPoints) {
+                   if (goal) {         // release reference
+                       RefsDebugCheck(!goal->Refs);
                        goal->Refs--;
-                       RefsDebugCheck( !goal->Refs );
-                       unit->Orders[0].Goal=NULL;
+                       RefsDebugCheck(!goal->Refs);
+                       unit->Orders[0].Goal = NULL;
                    }
-                    unit->Orders[0].Action=UnitActionStill;
-                   unit->SubAction=unit->State=0;
-                   if( unit->Selected ) {      // update display for new action
+                    unit->Orders[0].Action = UnitActionStill;
+                   unit->SubAction = unit->State = 0;
+                   if (unit->Selected) {       // update display for new action
                        SelectedUnitChanged();
                    }
                     return;
Index: stratagus/src/action/action_research.c
diff -u stratagus/src/action/action_research.c:1.32 
stratagus/src/action/action_research.c:1.33
--- stratagus/src/action/action_research.c:1.32 Fri Aug  8 06:16:43 2003
+++ stratagus/src/action/action_research.c      Fri Oct  3 18:16:26 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: action_research.c,v 1.32 2003/08/08 10:16:43 martinxyz Exp $
+//     $Id: action_research.c,v 1.33 2003/10/03 22:16:26 jsalmon3 Exp $
 
 //@{
 
@@ -63,8 +63,8 @@
 {
     const Upgrade* upgrade;
 
-    if( !unit->SubAction ) {           // first entry
-       upgrade=unit->Data.Research.Upgrade=unit->Orders[0].Arg1;
+    if (!unit->SubAction) {            // first entry
+       upgrade = unit->Data.Research.Upgrade = unit->Orders[0].Arg1;
 #if 0
        // FIXME: I want to support both, but with network we need this check
        //        but if want combined upgrades this is worse
@@ -72,53 +72,53 @@
        //
        //      Check if an other building has already started?
        //
-       if( unit->Player->UpgradeTimers.Upgrades[upgrade-Upgrades] ) {
+       if (unit->Player->UpgradeTimers.Upgrades[upgrade-Upgrades]) {
            DebugLevel0Fn("Two researches running\n");
-           PlayerAddCosts(unit->Player,upgrade->Costs);
+           PlayerAddCosts(unit->Player, upgrade->Costs);
 
-           unit->Reset=unit->Wait=1;
-           unit->Orders[0].Action=UnitActionStill;
-           unit->SubAction=0;
-           if( IsOnlySelected(unit) ) {
-               MustRedraw|=RedrawInfoPanel;
+           unit->Reset = unit->Wait = 1;
+           unit->Orders[0].Action = UnitActionStill;
+           unit->SubAction = 0;
+           if (IsOnlySelected(unit)) {
+               MustRedraw |= RedrawInfoPanel;
            }
            return;
        }
 #endif
-       unit->SubAction=1;
+       unit->SubAction = 1;
     } else {
-       upgrade=unit->Data.Research.Upgrade;
+       upgrade = unit->Data.Research.Upgrade;
     }
 
-    unit->Player->UpgradeTimers.Upgrades[upgrade-Upgrades]+=SpeedResearch;
-    if( unit->Player->UpgradeTimers.Upgrades[upgrade-Upgrades]
-               >=upgrade->Costs[TimeCost] ) {
-
-       NotifyPlayer(unit->Player,NotifyGreen,unit->X,unit->Y,
-               "%s: complete",unit->Type->Name);
-       if( unit->Player->Ai ) {
-           AiResearchComplete(unit,upgrade);
+    unit->Player->UpgradeTimers.Upgrades[upgrade-Upgrades] += SpeedResearch;
+    if (unit->Player->UpgradeTimers.Upgrades[upgrade-Upgrades] >=
+           upgrade->Costs[TimeCost]) {
+
+       NotifyPlayer(unit->Player, NotifyGreen, unit->X, unit->Y,
+           "%s: complete", unit->Type->Name);
+       if (unit->Player->Ai) {
+           AiResearchComplete(unit, upgrade);
        }
-        UpgradeAcquire(unit->Player,upgrade);
+        UpgradeAcquire(unit->Player, upgrade);
 
-       unit->Reset=unit->Wait=1;
-       unit->Orders[0].Action=UnitActionStill;
-       unit->SubAction=0;
+       unit->Reset = unit->Wait = 1;
+       unit->Orders[0].Action = UnitActionStill;
+       unit->SubAction = 0;
 
        // Upgrade can change all
        SelectedUnitChanged();
-       MustRedraw|=RedrawInfoPanel;
+       MustRedraw |= RedrawInfoPanel;
 
        return;
     }
 
-    if( IsOnlySelected(unit) ) {
+    if (IsOnlySelected(unit)) {
        // refresh info panel (to show progress, I think)
-       MustRedraw|=RedrawInfoPanel;
+       MustRedraw |= RedrawInfoPanel;
     }
 
-    unit->Reset=1;
-    unit->Wait=CYCLES_PER_SECOND/6;
+    unit->Reset = 1;
+    unit->Wait = CYCLES_PER_SECOND / 6;
 
     // FIXME: should be animations here?
 }
Index: stratagus/src/action/action_resource.c
diff -u stratagus/src/action/action_resource.c:1.56 
stratagus/src/action/action_resource.c:1.57
--- stratagus/src/action/action_resource.c:1.56 Fri Sep 26 11:47:50 2003
+++ stratagus/src/action/action_resource.c      Fri Oct  3 18:16:26 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: action_resource.c,v 1.56 2003/09/26 15:47:50 n0body Exp $
+//     $Id: action_resource.c,v 1.57 2003/10/03 22:16:26 jsalmon3 Exp $
 
 //@{
 
@@ -78,28 +78,29 @@
     int x;
     int y;
 
-    resinfo=unit->Type->ResInfo[unit->CurrentResource];
+    resinfo = unit->Type->ResInfo[unit->CurrentResource];
     if (resinfo->TerrainHarvester) {
-       x=unit->Orders->X;
-       y=unit->Orders->Y;
+       x = unit->Orders->X;
+       y = unit->Orders->Y;
        // Wood gone, look somewhere else.
-       if ( (!ForestOnMap(x,y)) && (!unit->IX) && (!unit->IY)) {
-           if (!FindTerrainType(UnitMovementMask(unit),MapFieldForest,0,10,
-               unit->Player,unit->X,unit->Y,&x,&y)) {
+       if ((!ForestOnMap(x, y)) && (!unit->IX) && (!unit->IY)) {
+           if (!FindTerrainType(UnitMovementMask(unit), MapFieldForest, 0, 10,
+                   unit->Player, unit->X, unit->Y, &x, &y)) {
                DebugLevel3Fn("No wood in range\n");
                return -1;
            } else {
                DebugLevel3Fn("%d,%d -> %d,%d\n" _C_ unit->X _C_ unit->Y _C_ x 
_C_ y);
-               unit->Orders->X=x;
-               unit->Orders->Y=y;
+               unit->Orders->X = x;
+               unit->Orders->Y = y;
                NewResetPath(unit);
            }
        }
-       switch( DoActionMove(unit)) {
+       switch (DoActionMove(unit)) {
            case PF_UNREACHABLE:
-               if 
(FindTerrainType(UnitMovementMask(unit),MapFieldForest,0,9999,unit->Player,unit->X,unit->Y,&x,&y))
 {
-                   unit->Orders->X=x;
-                   unit->Orders->Y=y;
+               if (FindTerrainType(UnitMovementMask(unit), MapFieldForest, 0, 
9999,
+                       unit->Player, unit->X, unit->Y, &x, &y)) {
+                   unit->Orders->X = x;
+                   unit->Orders->Y = y;
                    NewResetPath(unit);
                    DebugLevel3Fn("Found a better place to harvest %d,%d\n" _C_ 
x _C_ y);
                    // FIXME: can't this overflow? It really shouldn't, since
@@ -113,17 +114,17 @@
                return 0;
        }
     } else {
-       goal=unit->Orders[0].Goal;
-       DebugCheck( !goal );
-       switch( DoActionMove(unit) ) {  // reached end-point?
+       goal = unit->Orders[0].Goal;
+       DebugCheck(!goal);
+       switch (DoActionMove(unit)) {   // reached end-point?
            case PF_UNREACHABLE:
                return -1;
            case PF_REACHED:
                break;
            default:
                // Goal gone or something.
-               if( !unit->Reset || !(goal->Destroyed || goal->Removed
-                       || !goal->HP || goal->Orders[0].Action==UnitActionDie) 
) {
+               if (!unit->Reset || !(goal->Destroyed || goal->Removed ||
+                       !goal->HP || goal->Orders[0].Action == UnitActionDie)) {
                    return 0;
                }
                break;
@@ -141,82 +142,84 @@
 */
 local int StartGathering(Unit* unit)
 {
-    Unit * goal;
+    Unit* goal;
     ResourceInfo* resinfo;
 
-    resinfo=unit->Type->ResInfo[unit->CurrentResource];
+    resinfo = unit->Type->ResInfo[unit->CurrentResource];
     DebugCheck(unit->IX);
     DebugCheck(unit->IY);
     if (resinfo->TerrainHarvester) {
-       DebugCheck(!ForestOnMap(unit->Orders->X,unit->Orders->Y));
-       
UnitHeadingFromDeltaXY(unit,unit->Orders->X-unit->X,unit->Orders->Y-unit->Y);
+       DebugCheck(!ForestOnMap(unit->Orders->X, unit->Orders->Y));
+       UnitHeadingFromDeltaXY(unit, unit->Orders->X - unit->X,
+           unit->Orders->Y - unit->Y);
        if (resinfo->WaitAtResource) {
-           
unit->Data.ResWorker.TimeToHarvest=resinfo->WaitAtResource/SpeedResourcesHarvest[resinfo->ResourceId];
+           unit->Data.ResWorker.TimeToHarvest = resinfo->WaitAtResource /
+               SpeedResourcesHarvest[resinfo->ResourceId];
        } else {
-           unit->Data.ResWorker.TimeToHarvest=1;
+           unit->Data.ResWorker.TimeToHarvest = 1;
        }
-       unit->Data.ResWorker.DoneHarvesting=0;
+       unit->Data.ResWorker.DoneHarvesting = 0;
        return 1;
     }
 
-    goal=unit->Orders[0].Goal;
+    goal = unit->Orders[0].Goal;
     //
     // Target is dead, stop getting resources.
     //
-    if( goal->Destroyed || goal->Removed || !goal->HP ||
+    if (goal->Destroyed || goal->Removed || !goal->HP ||
            goal->Orders[0].Action==UnitActionDie) {
        DebugLevel3Fn("Destroyed resource goal, stop gathering.\n");
-       RefsDebugCheck( !goal->Refs );
+       RefsDebugCheck(!goal->Refs);
        --goal->Refs;
-       if( goal->Destroyed ) {
-           if( !goal->Refs ) {
+       if (goal->Destroyed) {
+           if (!goal->Refs) {
                ReleaseUnit(goal);
            }
        } else {
-           RefsDebugCheck( !goal->Refs );
+           RefsDebugCheck(!goal->Refs);
        }
        //  Find an alternative, but don't look too far.
-       unit->Orders[0].X=unit->Orders[0].Y=-1;
-       if ((goal=FindResource(unit,unit->X,unit->Y,10,unit->CurrentResource))) 
{
-           unit->SubAction=SUB_START_RESOURCE;
-           unit->Orders[0].Goal=goal;
-           RefsDebugCheck( !goal->Refs );
+       unit->Orders[0].X = unit->Orders[0].Y = -1;
+       if ((goal = FindResource(unit, unit->X, unit->Y, 10, 
unit->CurrentResource))) {
+           unit->SubAction = SUB_START_RESOURCE;
+           unit->Orders[0].Goal = goal;
+           RefsDebugCheck(!goal->Refs);
            ++goal->Refs;
        } else {
-           unit->Orders[0].Action=UnitActionStill;
-           unit->Orders[0].Goal=0;
-           unit->SubAction=0;
+           unit->Orders[0].Action = UnitActionStill;
+           unit->Orders[0].Goal = 0;
+           unit->SubAction = 0;
        }
        return 0;
     }
 
     // FIXME: 0 can happen, if to near placed by map designer.
-    DebugLevel3Fn("%d\n" _C_ MapDistanceBetweenUnits(unit,goal) );
-    DebugCheck( MapDistanceBetweenUnits(unit,goal)>1 );
+    DebugLevel3Fn("%d\n" _C_ MapDistanceBetweenUnits(unit, goal));
+    DebugCheck(MapDistanceBetweenUnits(unit, goal) > 1);
 
     //
     // Update the heading of a harvesting unit to looks straight at the 
resource.
     //
     if (goal) {
        UnitHeadingFromDeltaXY(unit,
-               2*(goal->X-unit->X)+goal->Type->TileWidth,
-               2*(goal->Y-unit->Y)+goal->Type->TileHeight);
+           2 * (goal->X - unit->X) + goal->Type->TileWidth,
+           2 * (goal->Y - unit->Y) + goal->Type->TileHeight);
     }
     
     //
     // If resource is still under construction, wait!
     //
-    
if(((goal->Type->MaxWorkers)&&(goal->Data.Resource.Active>=goal->Type->MaxWorkers))
-           || goal->Orders[0].Action==UnitActionBuilded) {
-       DebugLevel3Fn("Waiting at the resource with %d people inside.\n"
-               _C_ goal->Data.Resource.Active);
+    if ((goal->Type->MaxWorkers && goal->Data.Resource.Active >= 
goal->Type->MaxWorkers) ||
+           goal->Orders[0].Action == UnitActionBuilded) {
+       DebugLevel3Fn("Waiting at the resource with %d people inside.\n" _C_
+           goal->Data.Resource.Active);
        // FIXME: Determine somehow when the resource will be free to use
        // FIXME: Could we somehow find another resource? Think minerals
        // FIXME: We should add a flag for that, and a limited range.
        // FIXME: Think minerals in st*rcr*ft!!
        // However the CPU usage is really low (no pathfinding stuff).
-       unit->Wait=10;
-       unit->Reset=1;
+       unit->Wait = 10;
+       unit->Reset = 1;
        return 0;
     }
 
@@ -229,34 +232,38 @@
     //
     if (!resinfo->HarvestFromOutside) {
 
-       RefsDebugCheck( !goal->Refs );
+       RefsDebugCheck(!goal->Refs);
        --goal->Refs;
-       RefsDebugCheck( !goal->Refs );
-       unit->Orders[0].Goal=NoUnitP;
+       RefsDebugCheck(!goal->Refs);
+       unit->Orders[0].Goal = NoUnitP;
 
-       RemoveUnit(unit,goal);
-       unit->X=goal->X;
-       unit->Y=goal->Y;
+       RemoveUnit(unit, goal);
+       unit->X = goal->X;
+       unit->Y = goal->Y;
     }
 
-    
unit->Data.ResWorker.TimeToHarvest=resinfo->WaitAtResource/SpeedResourcesHarvest[resinfo->ResourceId];
+    unit->Data.ResWorker.TimeToHarvest = resinfo->WaitAtResource /
+       SpeedResourcesHarvest[resinfo->ResourceId];
 
-    unit->Data.ResWorker.DoneHarvesting=0;
+    unit->Data.ResWorker.DoneHarvesting = 0;
 
     return 1;
 }
 
-
+/**
+**     FIXME: docu
+*/
 local void AnimateActionHarvest(Unit* unit)
 {
     int flags;
-    if( unit->Type->Animations ) {
+
+    if (unit->Type->Animations) {
        //FIXME: Animation->Harvest
-       DebugCheck( !unit->Type->Animations->Attack );
-       flags=UnitShowAnimation(unit,unit->Type->Animations->Attack);
+       DebugCheck(!unit->Type->Animations->Attack);
+       flags = UnitShowAnimation(unit, unit->Type->Animations->Attack);
 #ifdef WITH_SOUND
-       if( (flags&AnimationSound) ) {
-           PlayUnitSound(unit,VoiceTreeChopping);
+       if ((flags & AnimationSound)) {
+           PlayUnitSound(unit, VoiceTreeChopping);
        }
 #endif
     }
@@ -278,37 +285,39 @@
     int i;
     int addload;
     
-    resinfo=unit->Type->ResInfo[unit->CurrentResource];
-    source=0;
+    resinfo = unit->Type->ResInfo[unit->CurrentResource];
+    source = 0;
     
-    if (resinfo->HarvestFromOutside||resinfo->TerrainHarvester) {
+    if (resinfo->HarvestFromOutside || resinfo->TerrainHarvester) {
        AnimateActionHarvest(unit);
-       unit->Data.ResWorker.TimeToHarvest-=unit->Wait;
+       unit->Data.ResWorker.TimeToHarvest -= unit->Wait;
     } else {
        unit->Data.ResWorker.TimeToHarvest--;
-       unit->Wait=1;
+       unit->Wait = 1;
     }
 
     if (unit->Data.ResWorker.DoneHarvesting) {
-       DebugCheck(!(resinfo->HarvestFromOutside||resinfo->TerrainHarvester));
+       DebugCheck(!(resinfo->HarvestFromOutside || resinfo->TerrainHarvester));
        return unit->Reset;
     }
     
     //  Target gone?
-    if 
(resinfo->TerrainHarvester&&!ForestOnMap(unit->Orders->X,unit->Orders->Y)) {
+    if (resinfo->TerrainHarvester && !ForestOnMap(unit->Orders->X, 
unit->Orders->Y)) {
        DebugLevel3Fn("Wood gone for unit %d.\n" _C_ unit->Slot);
        if (unit->Reset) {
            // Action now breakable, move to resource again.
-           unit->SubAction=SUB_MOVE_TO_RESOURCE;
+           unit->SubAction = SUB_MOVE_TO_RESOURCE;
            // Give it some reasonable look while serching.
-           unit->Frame=unit->Type->Animations->Still->Frame;
+           unit->Frame = unit->Type->Animations->Still->Frame;
        }
        return 0;
        // No wood? Freeze!!!
     }
 
-    while 
((!unit->Data.ResWorker.DoneHarvesting)&&unit->Data.ResWorker.TimeToHarvest<0) {
-       
unit->Data.ResWorker.TimeToHarvest+=resinfo->WaitAtResource/SpeedResourcesHarvest[resinfo->ResourceId];
+    while ((!unit->Data.ResWorker.DoneHarvesting) &&
+           unit->Data.ResWorker.TimeToHarvest < 0) {
+       unit->Data.ResWorker.TimeToHarvest += resinfo->WaitAtResource /
+           SpeedResourcesHarvest[resinfo->ResourceId];
        
        //
        //  Calculate how much we can load.
@@ -327,25 +336,25 @@
            DebugLevel3Fn("Harvested another %d resources.\n" _C_ addload);
            unit->Value += addload;
 
-           if (addload&&unit->Value==resinfo->ResourceCapacity) {
+           if (addload && unit->Value == resinfo->ResourceCapacity) {
                DebugLevel3("Removed wood.\n");
-               MapRemoveWood(unit->Orders->X,unit->Orders->Y);
+               MapRemoveWood(unit->Orders->X, unit->Orders->Y);
            }
        } else {
-           if ( resinfo->HarvestFromOutside ) {
-               source=unit->Orders[0].Goal;
+           if (resinfo->HarvestFromOutside) {
+               source = unit->Orders[0].Goal;
            } else {
-               source=unit->Container;
+               source = unit->Container;
            }
 
-           DebugCheck( !source );
-           DebugCheck( source->Value>655350 );
+           DebugCheck(!source);
+           DebugCheck(source->Value > 655350);
 
            //
            //  Target is dead, stop getting resources.
            //
-           if( !(source->Destroyed || source->Removed || !source->HP ||
-                   source->Orders[0].Action==UnitActionDie)) {
+           if (!(source->Destroyed || source->Removed || !source->HP ||
+                   source->Orders[0].Action == UnitActionDie)) {
                //  Don't load more that there is.
                if (addload > source->Value) {
                    addload = source->Value;
@@ -356,8 +365,8 @@
                source->Value -= addload;
               
                UnitMarkSeen(source);
-               if( IsOnlySelected(source) ) {
-                   MustRedraw|=RedrawInfoPanel;
+               if (IsOnlySelected(source)) {
+                   MustRedraw |= RedrawInfoPanel;
                }
            }
            
@@ -365,76 +374,78 @@
            //  End of resource: destroy the resource.
            //  FIXME: implement depleted resources.
            //
-           if( source->Destroyed || source->Removed || !source->HP ||
-                   source->Orders[0].Action==UnitActionDie || 
source->Value==0) {
+           if (source->Destroyed || source->Removed || !source->HP ||
+                   source->Orders[0].Action == UnitActionDie || source->Value 
== 0) {
                DebugLevel0Fn("Resource is destroyed\n");
-               uins=source->UnitInside;
+               uins = source->UnitInside;
                //
                // Improved version of DropOutAll that makes workers go to the 
depot.
                // FIXME: empty harvesters should find another resource.
                // 
-               for( i=source->InsideCount; i; --i,uins=uins->NextContained ) {
-                   if (uins->Value && 
(depot=FindDeposit(uins,uins->X,uins->Y,1000,unit->CurrentResource))) {
-                       DropOutNearest(uins,depot->X+depot->Type->TileWidth/2
-                               ,depot->Y+depot->Type->TileHeight/2
-                               
,source->Type->TileWidth,source->Type->TileHeight);
+               for (i = source->InsideCount; i; --i, uins = 
uins->NextContained) {
+                   if (uins->Value && (depot = FindDeposit(uins, uins->X, 
uins->Y,
+                           1000, unit->CurrentResource))) {
+                       DropOutNearest(uins, depot->X + depot->Type->TileWidth 
/ 2,
+                           depot->Y + depot->Type->TileHeight / 2,
+                           source->Type->TileWidth, source->Type->TileHeight);
                        //  Remember were it mined, so it can look around for 
another resource.
-                       uins->Orders[0].Arg1=(void*)((unit->X<<16)|unit->Y);
-                       uins->Orders[0].Goal=depot;
-                       RefsDebugCheck( !depot->Refs );
+                       uins->Orders[0].Arg1 = (void*)((unit->X << 16) | 
unit->Y);
+                       uins->Orders[0].Goal = depot;
+                       RefsDebugCheck(!depot->Refs);
                        ++depot->Refs;
                        NewResetPath(uins);
-                       uins->SubAction=SUB_MOVE_TO_DEPOT;
-                       uins->Wait=1;
+                       uins->SubAction = SUB_MOVE_TO_DEPOT;
+                       uins->Wait = 1;
                        DebugLevel0Fn("Sent unit %d to depot\n" _C_ uins->Slot);
                        continue;
                    }
-                   DropOutOnSide(uins,LookingW
-                           ,source->Type->TileWidth,source->Type->TileHeight);
-                   uins->Orders[0].X=uins->Orders[0].Y=-1;
-                   if 
((uins->Orders[0].Goal=FindResource(uins,uins->X,uins->Y,10,unit->CurrentResource)))
 {
+                   DropOutOnSide(uins, LookingW, source->Type->TileWidth,
+                       source->Type->TileHeight);
+                   uins->Orders[0].X = uins->Orders[0].Y = -1;
+                   if ((uins->Orders[0].Goal = FindResource(uins, uins->X, 
uins->Y,
+                           10, unit->CurrentResource))) {
                        DebugLevel0Fn("Unit %d found another resource.\n" _C_ 
uins->Slot);
-                       uins->SubAction=SUB_START_RESOURCE;
-                       uins->Wait=1;
-                       RefsDebugCheck( !uins->Orders[0].Goal->Refs );
+                       uins->SubAction = SUB_START_RESOURCE;
+                       uins->Wait = 1;
+                       RefsDebugCheck(!uins->Orders[0].Goal->Refs);
                        ++uins->Orders[0].Goal->Refs;
                    } else {
                        DebugLevel0Fn("Unit %d just sits around confused.\n" 
_C_ uins->Slot);
-                       uins->Orders[0].Action=UnitActionStill;
-                       uins->SubAction=0;
-                       uins->Wait=unit->Reset=1;
+                       uins->Orders[0].Action = UnitActionStill;
+                       uins->SubAction = 0;
+                       uins->Wait = unit->Reset = 1;
                    }
                }
 
                //  Don't destroy the resource twice.
-               if( !(source->Destroyed || source->Removed || !source->HP ||
-                   source->Orders[0].Action==UnitActionDie)){
+               if (!(source->Destroyed || source->Removed || !source->HP ||
+                   source->Orders[0].Action == UnitActionDie)){
                    LetUnitDie(source);
                    // FIXME: make the workers inside look for a new resource.
                }
-               source=NULL;
+               source = NULL;
            }
        }
        if (resinfo->TerrainHarvester) {
            if (unit->Value == resinfo->ResourceCapacity) {
                // Mark as complete.
                DebugLevel3Fn("Done Harvesting, waiting for reset.\n");
-               unit->Data.ResWorker.DoneHarvesting=1;
+               unit->Data.ResWorker.DoneHarvesting = 1;
            }
            return 0;
        }
        
        if (resinfo->HarvestFromOutside && !resinfo->TerrainHarvester) {
-           if ((unit->Value == resinfo->ResourceCapacity)||(source==NULL)) {
+           if ((unit->Value == resinfo->ResourceCapacity) || (source == NULL)) 
{
                // Mark as complete.
                DebugLevel3Fn("Done Harvesting, waiting for reset %X.\n" _C_ 
(unsigned)source);
-               unit->Data.ResWorker.DoneHarvesting=1;
+               unit->Data.ResWorker.DoneHarvesting = 1;
            }
            return 0;
        }
        
-       if ((!resinfo->HarvestFromOutside)&& (!resinfo->TerrainHarvester)) {
-           return unit->Value==resinfo->ResourceCapacity&&source;
+       if ((!resinfo->HarvestFromOutside) && (!resinfo->TerrainHarvester)) {
+           return unit->Value == resinfo->ResourceCapacity && source;
        }
     }
 
@@ -454,24 +465,23 @@
     Unit* source;
     ResourceInfo* resinfo;
 
-    resinfo=unit->Type->ResInfo[unit->CurrentResource];
+    resinfo = unit->Type->ResInfo[unit->CurrentResource];
 
-   
-    source=0;
+    source = 0;
     if (!resinfo->TerrainHarvester) {
-       if ( resinfo->HarvestFromOutside ) {
-           source=unit->Orders[0].Goal;
+       if (resinfo->HarvestFromOutside) {
+           source = unit->Orders[0].Goal;
        } else {
-           source=unit->Container;
+           source = unit->Container;
        }
        source->Data.Resource.Active--;
-       DebugCheck(source->Data.Resource.Active<0);
+       DebugCheck(source->Data.Resource.Active < 0);
     }
      
 
     // Store resource position.
     // FIXME: is this the best way?
-    unit->Orders[0].Arg1=(void*)((unit->X<<16)|unit->Y);
+    unit->Orders[0].Arg1 = (void*)((unit->X << 16) | unit->Y);
  
     if (!unit->Value) {
        DebugLevel0Fn("Unit is empty???\n");
@@ -479,41 +489,42 @@
        DebugLevel3Fn("Unit is fine, search for a depot.\n");
     }
     // Find and send to resource deposit.
-    if( (!(depot=FindDeposit(unit,unit->X,unit->Y,1000,unit->CurrentResource)))
-           || (!unit->Value)) {
-       if (!(resinfo->HarvestFromOutside||resinfo->TerrainHarvester)) {
+    if (!(depot = FindDeposit(unit, unit->X, unit->Y, 1000, 
unit->CurrentResource)) ||
+           !unit->Value) {
+       if (!(resinfo->HarvestFromOutside || resinfo->TerrainHarvester)) {
            DebugCheck(!unit->Container);
-           
DropOutOnSide(unit,LookingW,source->Type->TileWidth,source->Type->TileHeight);
+           DropOutOnSide(unit, LookingW, source->Type->TileWidth,
+               source->Type->TileHeight);
        }
        DebugLevel0Fn("Can't find a resource deposit.\n");
-       unit->Orders[0].Action=UnitActionStill;
-       unit->SubAction=0;
+       unit->Orders[0].Action = UnitActionStill;
+       unit->SubAction = 0;
        // should return 0, done below!
     } else {
-       if (!(resinfo->HarvestFromOutside||resinfo->TerrainHarvester)) {
+       if (!(resinfo->HarvestFromOutside || resinfo->TerrainHarvester)) {
            DebugCheck(!unit->Container);
-           DropOutNearest(unit,depot->X+depot->Type->TileWidth/2
-                   ,depot->Y+depot->Type->TileHeight/2
-                   ,source->Type->TileWidth,source->Type->TileHeight);
+           DropOutNearest(unit, depot->X + depot->Type->TileWidth / 2,
+               depot->Y + depot->Type->TileHeight / 2,
+               source->Type->TileWidth, source->Type->TileHeight);
        }
-       unit->Orders[0].Goal=depot;
-       RefsDebugCheck( !depot->Refs );
+       unit->Orders[0].Goal = depot;
+       RefsDebugCheck(!depot->Refs);
        ++depot->Refs;
-       unit->Orders[0].RangeX=unit->Orders[0].RangeY=1;
-       unit->Orders[0].X=unit->Orders[0].Y=-1;
-       unit->SubAction=SUB_MOVE_TO_DEPOT;
+       unit->Orders[0].RangeX = unit->Orders[0].RangeY = 1;
+       unit->Orders[0].X = unit->Orders[0].Y = -1;
+       unit->SubAction = SUB_MOVE_TO_DEPOT;
        NewResetPath(unit);
     }
 
     CheckUnitToBeDrawn(unit);
-    if( IsOnlySelected(unit) ) {
+    if (IsOnlySelected(unit)) {
        SelectedUnitChanged();
        // FIXME: redundant?
-       MustRedraw|=RedrawButtonPanel;
+       MustRedraw |= RedrawButtonPanel;
     }
 
-    unit->Wait=1;
-    return unit->Orders[0].Action!=UnitActionStill;
+    unit->Wait = 1;
+    return unit->Orders[0].Action != UnitActionStill;
 }
 
 /**
@@ -528,19 +539,19 @@
     Unit* goal;
     ResourceInfo* resinfo;
 
-    resinfo=unit->Type->ResInfo[unit->CurrentResource];
+    resinfo = unit->Type->ResInfo[unit->CurrentResource];
 
-    goal=unit->Orders[0].Goal;
-    DebugCheck( !goal );
+    goal = unit->Orders[0].Goal;
+    DebugCheck(!goal);
 
-    switch( DoActionMove(unit) ) {     // reached end-point?
+    switch (DoActionMove(unit)) {      // reached end-point?
        case PF_UNREACHABLE:
            return -1;
        case PF_REACHED:
            break;
        default:
-           if( !unit->Reset || !(goal->Destroyed || goal->Removed
-                   || !goal->HP || goal->Orders[0].Action==UnitActionDie) ) {
+           if (!unit->Reset || !(goal->Destroyed || goal->Removed ||
+                   !goal->HP || goal->Orders[0].Action == UnitActionDie)) {
                return 0;
            }
            break;
@@ -549,64 +560,64 @@
     //
     // Target is dead, stop getting resources.
     //
-    if( goal->Destroyed ) {
+    if (goal->Destroyed) {
        DebugLevel0Fn("Destroyed unit\n");
-       RefsDebugCheck( !goal->Refs );
-       if( !--goal->Refs ) {
+       RefsDebugCheck(!goal->Refs);
+       if (!--goal->Refs) {
            ReleaseUnit(goal);
        }
-       unit->Orders[0].Goal=NoUnitP;
+       unit->Orders[0].Goal = NoUnitP;
        // FIXME: perhaps we should choose an alternative
-       unit->Orders[0].Action=UnitActionStill;
-       unit->SubAction=0;
+       unit->Orders[0].Action = UnitActionStill;
+       unit->SubAction = 0;
        return 0;
-    } else if( goal->Removed || !goal->HP
-           || goal->Orders[0].Action==UnitActionDie ) {
-       RefsDebugCheck( !goal->Refs );
+    } else if (goal->Removed || !goal->HP ||
+           goal->Orders[0].Action == UnitActionDie) {
+       RefsDebugCheck(!goal->Refs);
        --goal->Refs;
-       RefsDebugCheck( !goal->Refs );
-       unit->Orders[0].Goal=NoUnitP;
+       RefsDebugCheck(!goal->Refs);
+       unit->Orders[0].Goal = NoUnitP;
        // FIXME: perhaps we should choose an alternative
-       unit->Orders[0].Action=UnitActionStill;
-       unit->SubAction=0;
+       unit->Orders[0].Action = UnitActionStill;
+       unit->SubAction = 0;
        return 0;
     }
 
-    DebugCheck( unit->Wait!=1 );
+    DebugCheck(unit->Wait != 1);
 
     //
     // If resource depot is still under construction, wait!
     //
-    if( goal->Orders[0].Action==UnitActionBuilded ) {
+    if (goal->Orders[0].Action == UnitActionBuilded) {
         DebugLevel2Fn("Invalid resource depot. FIXME:WAIT!!! \n");
        return 0;
     }
 
-    RefsDebugCheck( !goal->Refs );
+    RefsDebugCheck(!goal->Refs);
     --goal->Refs;
-    RefsDebugCheck( !goal->Refs );
-    unit->Orders[0].Goal=NoUnitP;
+    RefsDebugCheck(!goal->Refs);
+    unit->Orders[0].Goal = NoUnitP;
 
     //
     // Place unit inside the depot
     //
-    RemoveUnit(unit,goal);
-    unit->X=goal->X;
-    unit->Y=goal->Y;
+    RemoveUnit(unit, goal);
+    unit->X = goal->X;
+    unit->Y = goal->Y;
 
     //
     // Update resource.
     //
-    unit->Player->Resources[resinfo->FinalResource]+=
-       (unit->Value*unit->Player->Incomes[resinfo->FinalResource])/100;
-    unit->Player->TotalResources[resinfo->FinalResource]+=
-       (unit->Value*unit->Player->Incomes[resinfo->FinalResource])/100;
-    unit->Value=0;
-    if( unit->Player==ThisPlayer ) {
-       MustRedraw|=RedrawResources;
+    unit->Player->Resources[resinfo->FinalResource] +=
+       (unit->Value * unit->Player->Incomes[resinfo->FinalResource]) / 100;
+    unit->Player->TotalResources[resinfo->FinalResource] +=
+       (unit->Value * unit->Player->Incomes[resinfo->FinalResource]) / 100;
+    unit->Value = 0;
+    if (unit->Player == ThisPlayer) {
+       MustRedraw |= RedrawResources;
     }
 
-    unit->Wait=resinfo->WaitAtDepot/SpeedResourcesReturn[resinfo->ResourceId];
+    unit->Wait = resinfo->WaitAtDepot / 
SpeedResourcesReturn[resinfo->ResourceId];
 
     return 1;
 }
@@ -626,51 +637,51 @@
     int x;
     int y;
 
-    resinfo=unit->Type->ResInfo[unit->CurrentResource];
+    resinfo = unit->Type->ResInfo[unit->CurrentResource];
 
-    depot=ResourceDepositOnMap(unit->X,unit->Y,resinfo->ResourceId);
-    DebugCheck( !depot );
+    depot = ResourceDepositOnMap(unit->X, unit->Y, resinfo->ResourceId);
+    DebugCheck(!depot);
     // Could be destroyed, but then we couldn't be in?
 
-    if( unit->Orders[0].Arg1==(void*)-1 ) {
-       x=unit->X;
-       y=unit->Y;
+    if (unit->Orders[0].Arg1 == (void*)-1) {
+       x = unit->X;
+       y = unit->Y;
     } else {
-       x=(int)unit->Orders[0].Arg1>>16;
-       y=(int)unit->Orders[0].Arg1&0xFFFF;
+       x = (int)unit->Orders[0].Arg1 >> 16;
+       y = (int)unit->Orders[0].Arg1 & 0xFFFF;
     }
     //  Range hardcoded. don't stray too far though
-    if( resinfo->TerrainHarvester ) {
-       if (FindTerrainType(UnitMovementMask(unit),MapFieldForest,0,10,
-               unit->Player,x,y,&x,&y)) {
-           
DropOutNearest(unit,x,y,depot->Type->TileWidth,depot->Type->TileHeight);
-           unit->Orders->X=x;
-           unit->Orders->Y=y;
-       } else {
-           
DropOutOnSide(unit,LookingW,depot->Type->TileWidth,depot->Type->TileHeight);
-           unit->Orders[0].Action=UnitActionStill;
-           unit->SubAction=0;
+    if (resinfo->TerrainHarvester) {
+       if (FindTerrainType(UnitMovementMask(unit), MapFieldForest, 0, 10,
+               unit->Player, x, y, &x, &y)) {
+           DropOutNearest(unit, x, y, depot->Type->TileWidth, 
depot->Type->TileHeight);
+           unit->Orders->X = x;
+           unit->Orders->Y = y;
+       } else {
+           DropOutOnSide(unit, LookingW, depot->Type->TileWidth, 
depot->Type->TileHeight);
+           unit->Orders[0].Action = UnitActionStill;
+           unit->SubAction = 0;
        }
     } else {
-       if ((goal=FindResource(unit,x,y,10,unit->CurrentResource))) {
-           DropOutNearest(unit,goal->X+goal->Type->TileWidth/2
-                   ,goal->Y+goal->Type->TileHeight/2
-                   ,depot->Type->TileWidth,depot->Type->TileHeight);
-           unit->Orders[0].Goal=goal;
-           RefsDebugCheck( !goal->Refs );
+       if ((goal = FindResource(unit, x, y, 10, unit->CurrentResource))) {
+           DropOutNearest(unit, goal->X + goal->Type->TileWidth / 2,
+               goal->Y + goal->Type->TileHeight / 2,
+               depot->Type->TileWidth, depot->Type->TileHeight);
+           unit->Orders[0].Goal = goal;
+           RefsDebugCheck(!goal->Refs);
            ++goal->Refs;
-           unit->Orders[0].RangeX=unit->Orders[0].RangeY=1;
-           unit->Orders[0].X=unit->Orders[0].Y=-1;
+           unit->Orders[0].RangeX = unit->Orders[0].RangeY = 1;
+           unit->Orders[0].X = unit->Orders[0].Y = -1;
        } else {
-           
DropOutOnSide(unit,LookingW,depot->Type->TileWidth,depot->Type->TileHeight);
-           unit->Orders[0].Action=UnitActionStill;
-           unit->SubAction=0;
+           DropOutOnSide(unit, LookingW, depot->Type->TileWidth, 
depot->Type->TileHeight);
+           unit->Orders[0].Action = UnitActionStill;
+           unit->SubAction = 0;
        }
     }
 
     CheckUnitToBeDrawn(unit);
-    unit->Wait=1;
-    return unit->Orders[0].Action!=UnitActionStill;
+    unit->Wait = 1;
+    return unit->Orders[0].Action != UnitActionStill;
 }
 
 /**
@@ -681,21 +692,21 @@
 void ResourceGiveUp(Unit* unit)
 {
     DebugLevel0Fn("Unit %d gave up on resource gathering.\n" _C_ unit->Slot);
-    unit->Orders[0].Action=UnitActionStill;
-    unit->Wait=1;
-    unit->Reset=1;
-    unit->Orders[0].X=unit->Orders[0].Y=-1;
-    unit->SubAction=0;
-    if( unit->Type->ResInfo[unit->CurrentResource]->LoseResources &&
-           
unit->Value<unit->Type->ResInfo[unit->CurrentResource]->ResourceCapacity) {
-       unit->Value=0;
-       unit->CurrentResource=0;
+    unit->Orders[0].Action = UnitActionStill;
+    unit->Wait = 1;
+    unit->Reset = 1;
+    unit->Orders[0].X = unit->Orders[0].Y = -1;
+    unit->SubAction = 0;
+    if (unit->Type->ResInfo[unit->CurrentResource]->LoseResources &&
+           unit->Value < 
unit->Type->ResInfo[unit->CurrentResource]->ResourceCapacity) {
+       unit->Value = 0;
+       unit->CurrentResource = 0;
     }
-    if( unit->Orders[0].Goal ) {
-       RefsDebugCheck( !unit->Orders[0].Goal->Refs );
+    if (unit->Orders[0].Goal) {
+       RefsDebugCheck(!unit->Orders[0].Goal->Refs);
        --unit->Orders[0].Goal->Refs;
-       RefsDebugCheck( !unit->Orders[0].Goal->Refs );
-       unit->Orders[0].Goal=NoUnitP;
+       RefsDebugCheck(!unit->Orders[0].Goal->Refs);
+       unit->Orders[0].Goal = NoUnitP;
     }
 }
 
@@ -711,40 +722,42 @@
     int ret;
     int newres;
 
-    DebugLevel3Fn("%s(%d) SubAction %d TTH %d res %s goal %ul\n"
-       _C_ unit->Type->Ident _C_ UnitNumber(unit) _C_ unit->SubAction
-       _C_ unit->Data.ResWorker.TimeToHarvest _C_ 
DefaultResourceNames[unit->CurrentResource]
-       _C_ (unsigned int)unit->Orders->Goal);
+    DebugLevel3Fn("%s(%d) SubAction %d TTH %d res %s goal %ul\n" _C_
+       unit->Type->Ident _C_ UnitNumber(unit) _C_ unit->SubAction _C_
+       unit->Data.ResWorker.TimeToHarvest _C_
+       DefaultResourceNames[unit->CurrentResource] _C_
+       (unsigned int)unit->Orders->Goal);
     
     // Let's start mining.
-    if ( unit->SubAction==SUB_START_RESOURCE ) {
+    if (unit->SubAction == SUB_START_RESOURCE) {
        if (unit->Orders->Goal) {
-           newres=unit->Orders->Goal->Type->GivesResource;
+           newres = unit->Orders->Goal->Type->GivesResource;
        } else {
-           newres=WoodCost;
+           newres = WoodCost;
        }
-       if (newres!=unit->CurrentResource) {
+       if (newres != unit->CurrentResource) {
            // Drop other resources.
-           unit->Value=0;
+           unit->Value = 0;
        }
-       unit->CurrentResource=newres;
+       unit->CurrentResource = newres;
        NewResetPath(unit);
        DebugLevel3Fn("Started mining. reset path.\n");
-       unit->SubAction=SUB_MOVE_TO_RESOURCE;
+       unit->SubAction = SUB_MOVE_TO_RESOURCE;
     }
    
     //  Move to the resource location.
-    if ( unit->SubAction>=SUB_MOVE_TO_RESOURCE && 
unit->SubAction<SUB_UNREACHABLE_RESOURCE ) {
+    if (unit->SubAction >= SUB_MOVE_TO_RESOURCE &&
+           unit->SubAction < SUB_UNREACHABLE_RESOURCE) {
        // -1 failure, 0 not yet reached, 1 reached
-       if( (ret=MoveToResource(unit)) ) {
-           if( ret==-1 ) {
+       if ((ret = MoveToResource(unit))) {
+           if (ret == -1) {
                // Can't Reach
                unit->SubAction++;
-               unit->Wait=10;
+               unit->Wait = 10;
                return;
            } else {
                // Reached
-               unit->SubAction=SUB_START_GATHERING;
+               unit->SubAction = SUB_START_GATHERING;
            }
        } else {
            // Move along.
@@ -753,61 +766,62 @@
     }
 
     //  Resource seems to be unreachable
-    if (unit->SubAction==SUB_UNREACHABLE_RESOURCE) {
+    if (unit->SubAction == SUB_UNREACHABLE_RESOURCE) {
        ResourceGiveUp(unit);
        return;
     }
 
     //  Start gathering the resource
-    if (unit->SubAction==SUB_START_GATHERING) {
+    if (unit->SubAction == SUB_START_GATHERING) {
        if (StartGathering(unit)) {
-           unit->SubAction=SUB_GATHER_RESOURCE;
+           unit->SubAction = SUB_GATHER_RESOURCE;
        } else {
-       return;
+           return;
        }
     }
     
     //  Gather the resource.
-    if (unit->SubAction==SUB_GATHER_RESOURCE) {
-       if( GatherResource(unit) ) {
-           unit->SubAction=SUB_STOP_GATHERING;
+    if (unit->SubAction == SUB_GATHER_RESOURCE) {
+       if (GatherResource(unit)) {
+           unit->SubAction = SUB_STOP_GATHERING;
        } else {
            return;
        }
     }
     
     //  Stop gathering the resource.
-    if (unit->SubAction==SUB_STOP_GATHERING) {
-       if( StopGathering(unit) ) {
-           unit->SubAction=SUB_MOVE_TO_DEPOT;
+    if (unit->SubAction == SUB_STOP_GATHERING) {
+       if (StopGathering(unit)) {
+           unit->SubAction = SUB_MOVE_TO_DEPOT;
        }
     }
 
     //  Move back home.
-    if 
(unit->SubAction>=SUB_MOVE_TO_DEPOT&&unit->SubAction<SUB_UNREACHABLE_DEPOT) {
+    if (unit->SubAction >= SUB_MOVE_TO_DEPOT &&
+           unit->SubAction < SUB_UNREACHABLE_DEPOT) {
        // -1 failure, 0 not yet reached, 1 reached
-       if( (ret=MoveToDepot(unit)) ) {
-           if( ret==-1 ) {
+       if ((ret = MoveToDepot(unit))) {
+           if (ret == -1) {
                // Can't Reach
                unit->SubAction++;
-               unit->Wait=10;
+               unit->Wait = 10;
            } else {
-               unit->SubAction=SUB_RETURN_RESOURCE;
+               unit->SubAction = SUB_RETURN_RESOURCE;
            }
        }
        return;
     }
 
     //  Depot seems to be unreachable
-    if (unit->SubAction==SUB_UNREACHABLE_DEPOT) {
+    if (unit->SubAction == SUB_UNREACHABLE_DEPOT) {
        ResourceGiveUp(unit);
        return;
     }
 
     //  Unload resources at the depot.
-    if (unit->SubAction==SUB_RETURN_RESOURCE) {
-       if( WaitInDepot(unit) ) {
-           unit->SubAction=SUB_START_RESOURCE;
+    if (unit->SubAction == SUB_RETURN_RESOURCE) {
+       if (WaitInDepot(unit)) {
+           unit->SubAction = SUB_START_RESOURCE;
            //
            //  It's posible, though very rare that the unit's goal blows up
            //  this cycle, but after this unit. Thus, next frame the unit




reply via email to

[Prev in Thread] Current Thread [Next in Thread]