Update of /cvsroot/netrek/server/Vanilla/robotd
In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv26631/robotd

Modified Files:
	assault.c decide.c defs.h robot.c 
Log Message:
merge from jerub darcs 2006-05-12

Index: defs.h
===================================================================
RCS file: /cvsroot/netrek/server/Vanilla/robotd/defs.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- defs.h	22 Apr 2006 02:16:46 -0000	1.4
+++ defs.h	12 May 2006 03:44:48 -0000	1.5
@@ -227,7 +227,7 @@
 /* client version of UDPDIAG */
 #define UDPDIAG(x)      { if (udpDebug) { printf("UDP: "); printf x; }}
 #define V_UDPDIAG(x)    /*UDPDIAG(x)*/
-#endif
+#endif /* ATM */
 
 #define RANDOM()	rand()
 #define SRANDOM(x)	srand(x)

Index: decide.c
===================================================================
RCS file: /cvsroot/netrek/server/Vanilla/robotd/decide.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- decide.c	22 Apr 2006 02:16:46 -0000	1.3
+++ decide.c	12 May 2006 03:44:48 -0000	1.4
@@ -238,18 +238,21 @@
    else if(!unknownpl(_state.assault_planet) && 
       _state.assault_planet->pl_armies < 5){
       unassault_c("already bombed.");
+      check_ogg(NULL,20000); /* test JKH */
       check_bomb(NULL);
       return;
    }
 
    if(myteam_bombing(_state.assault_planet, _state.assault_planet->pl_mydist)){
       unassault_c("somebody else bombing");
+      check_ogg(NULL,20000); /* test JKH */
       check_bomb(NULL);
       return;
    }
    if(_state.assault_planet->pl_mydist < 20000 && 
       pl_defended(_state.assault_planet, 2)){
       unassault_c("planet defended");
+      check_ogg(NULL,20000); /* test JKH */
       check_bomb(NULL);
       return;
    }

Index: robot.c
===================================================================
RCS file: /cvsroot/netrek/server/Vanilla/robotd/robot.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- robot.c	22 Apr 2006 02:16:46 -0000	1.3
+++ robot.c	12 May 2006 03:44:48 -0000	1.4
@@ -626,6 +626,7 @@
       && MYFUEL() > 25)
       req_detonate("");
 #endif
+
 #ifdef nodef
    /* debug */
    if(num_hits > 0 && me->p_speed > 6){

Index: assault.c
===================================================================
RCS file: /cvsroot/netrek/server/Vanilla/robotd/assault.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- assault.c	22 Apr 2006 02:16:46 -0000	1.2
+++ assault.c	12 May 2006 03:44:48 -0000	1.3
@@ -43,6 +43,30 @@
    }
 }
 
+/* determine if there is risk of death due to res of opponent */
+static int risk_res_death(struct planet *pl)
+{
+  if (pl == NULL) return 0;
+  /* One of the home planets identified by server etc/sysdef PLANETS */
+  if (pl->pl_flags & PLHOME) return 1;
+  /* Altair in standard position */
+  if (pl->pl_no == 7 && pl->pl_x == 11000 && pl->pl_y == 75000) return 1;
+  /* Draconis in standard position */
+  if (pl->pl_no == 16 && pl->pl_x == 28000 && pl->pl_y == 23000) return 1;
+  /* Scorpii in standard position */
+  if (pl->pl_no == 26 && pl->pl_x == 70720 && pl->pl_y == 26320) return 1;
+  /* Within rectangular phaser distance of any home planet res point */
+  int i;
+  for (i=0,pl=planets;i<MAXPLANETS;i++,pl++) {
+    if (pl->pl_flags & PLHOME) {
+      if(ABS(pl->pl_x - me->p_x) < 12000 && ABS(pl->pl_y - me->p_y) < 12000) {
+	return 1;
+      }
+    }
+  }
+  return 0;
+}
+
 goto_assault_planet()
 {
    Player		*e = _state.closest_e;
@@ -70,9 +94,18 @@
 
    /* bug -- crashes into people */
    /* don't cloak if we're far from planet */
+   /* start within assuming you don't need cloak */
+   cloak = 0;
+
    if(!inl  && pdist > 20000)
       cloak = 0;
 
+   /* cloak bomb near enemy core, so you don't get res-killed */
+
+   if (pdist < 7000) {
+     if (risk_res_death(pl)) cloak = 1;
+   }
+
    if(pdist < 10000 && edist < 18000)
       cloak = 1;
    
@@ -135,22 +168,32 @@
 
 assault_planet()
 {
-   Player		*e = _state.closest_e;
-   struct player	*j = e?e->p:NULL;
-   struct planet 	*pl = _state.assault_planet;
-   int			armies = pl->pl_armies;
+  Player         *e = _state.closest_e;
+  struct player	 *j = e?e->p:NULL;
+  struct planet  *pl = _state.assault_planet;
+  int            cloak;
+  int            armies = pl->pl_armies;
 
 #ifdef nodef
    if(!do_cloak(0))
       req_cloak_off();
 #endif
-   if(e && e->p && isAlive(e->p)){
-      if(e->dist < 10000)
-	 req_cloak_on();
-      else
-	 req_cloak_off("enemy farther than 10000");
+
+   cloak=0; /* start assuming you don't need to cloak */
+
+   if (e && e->p && isAlive(e->p)){ /* cloak when enemy is near */
+     if(e->dist < 10000) {
+	cloak=1;
+     }
    }
-      
+
+   /* cloak bomb near enemy core, so you don't get res-killed */
+   if (risk_res_death(pl)) cloak = 1;
+
+   if(cloak)
+      req_cloak_on();
+   else
+      req_cloak_off("no cloak in assault_planet()");
 
    if(armies > 4){
       req_bomb();