Date: Wednesday January 7, 2004 @ 20:42
Author: unbelver
Update of /home/netrek/cvsroot/Vanilla/robots
In directory swashbuckler.real-time.com:/var/tmp/cvs-serv14253/robots
Modified Files:
puck.c puckdefs.h puckmove.c
Log Message:
Added in Psychosis' hockey code running on puck.psychosis.net.
Disabled by default, but useful to keep in the main tree. 3
differences.
PUCK_FIRST: Puck process runs first on each update. Mainly for shots
on edge of shot range. Puck isn't pressored out before puck notices
that it is shot.
FO_BIAS: non-scoring team, or team that's more than 5 goals behind
get faceoff advantage. Advantage settable with FACEOFF_HELP.
SITOUT_HURTS: Normally a sitout puts you within 5 points of exploding
to avoid cheating. Undefine this and sitout won't hurt.
--Carlos V.
****************************************
Index: Vanilla/robots/puck.c
diff -u Vanilla/robots/puck.c:1.4 Vanilla/robots/puck.c:1.5
--- Vanilla/robots/puck.c:1.4 Sun Jul 11 22:28:02 1999
+++ Vanilla/robots/puck.c Wed Jan 7 20:42:20 2004
@@ -20,6 +20,13 @@
#include "puckdefs.h"
#include "proto.h"
+#ifdef PUCK_FIRST
+#include <sys/sem.h>
+
+struct sembuf sem_puck_op[1];
+int sem_puck;
+#endif /*PUCK_FIRST*/
+
void config(int);
extern int redrawall;
@@ -104,6 +111,17 @@
myship = &me->p_ship;
mystats = &me->p_stats;
lastm = mctl->mc_current;
+
+#ifdef PUCK_FIRST
+ if((sem_puck = semget(PUCK_FIRST, 1, 0600)) == -1)
+ {
+ ERROR(1,("Puck unable to get semaphore."));
+ }
+
+ sem_puck_op[0].sem_num = 0;
+ sem_puck_op[0].sem_op = 1;
+ sem_puck_op[0].sem_flg = 0;
+#endif /*PUCK_FIRST*/
/* At this point we have memory set up. If we aren't a fleet, we don't
want to replace any other robots on this team, so we'll check the
Index: Vanilla/robots/puckdefs.h
diff -u Vanilla/robots/puckdefs.h:1.2 Vanilla/robots/puckdefs.h:1.3
--- Vanilla/robots/puckdefs.h:1.2 Fri Apr 30 15:19:07 1999
+++ Vanilla/robots/puckdefs.h Wed Jan 7 20:42:20 2004
@@ -45,6 +45,18 @@
#define NUMSKATERS 12
+ /* With SITOUT_HURTS defined, sitout causes
+ ships to be severely damaged (in order to prevent
+ abuse of sitout to gain position). If undefined,
+ sitout does not damage, but also does not
+ change a ship's y-position (allowing ships to
+ return to the rink quickly if a sitout wasn't
+ really needed, etc, which happens far more often
+ than abuse). Default was defined */
+#define SITOUT_HURTS
+
+
+
/* Some "computer speed" definitions */
#define HOWOFTEN 1 /*Robot moves every HOWOFTEN cycles*/
#define PERSEC (1000000/UPDATE/HOWOFTEN) /* # of robo calls per second*/
@@ -78,6 +90,17 @@
#define KLI_E (RINK_TOP + TENTH/2) /* end of Kli goal */
#define KLI_B (RINK_TOP + (RINK_LENGTH/3)) /* Kli blue line */
+ /* FO_BIAS adds in code for biasing Faceoff against
+ the scoring team, or a team ahead by more than 5
+ points. Leaving this undefined is the default
+ behavior of leaving puck in the center without
+ FACEOFF_HELP code */
+/* #undef FO_BIAS */
+ /* FACEOFF_HELP should be defined, either as 0
+ to leave the default behaviour, or > 0 as the
+ offset to apply to the puck's droppoint at faceoff
+ to assist the losing team. */
+#define FACEOFF_HELP (TENTH*2/3)
/* Some global puck variable definitions */
Index: Vanilla/robots/puckmove.c
diff -u Vanilla/robots/puckmove.c:1.8 Vanilla/robots/puckmove.c:1.9
--- Vanilla/robots/puckmove.c:1.8 Sun Dec 3 11:52:20 2000
+++ Vanilla/robots/puckmove.c Wed Jan 7 20:42:20 2004
@@ -23,6 +23,13 @@
#include "data.h"
#include "puckdefs.h"
+#ifdef PUCK_FIRST
+#include <sys/sem.h>
+
+extern struct sembuf sem_puck_op[1];
+extern int sem_puck;
+#endif /*PUCK_FIRST */
+
#define WEAKER_STR 2 /* integer factor to divide tractstr down */
@@ -161,7 +168,19 @@
int team_offsides = 0;
#endif
+#ifdef PUCK_FIRST
+void _rmove(void); /* original rmove we're hijacking */
+
+void rmove(void)
+{
+ _rmove();
+ semop(sem_puck, sem_puck_op, 1); /* we're done, everyone else's turn now */
+}
+
+void _rmove(void)
+#else /*PUCK_FIRST */
void rmove(void)
+#endif /*PUCK_FIRST */
{
extern struct Enemy *get_nearest();
struct Enemy *enemy_buf;
@@ -174,6 +193,10 @@
static int pauseticks;
+#ifdef FO_BIAS
+ static int faceoffbias = 0;
+#endif /*FO_BIAS*/
+
/***** Start The Code Here *****/
HANDLE_SIG(SIGALRM,rmove);
@@ -193,12 +216,18 @@
/* This is done first to allow for a good short_game */
if (roboclock >= END_OF_PERIOD) {
if (period >= PERIODS_PER_GAME) {
+#ifdef FO_BIAS
+ faceoffbias = 0;
+#endif /*FO_BIAS*/
messAll(anncer->p_no,roboname,"#############################");
messAll(anncer->p_no,roboname,"#");
messAll(me->p_no, roboname,"# END OF GAME.");
messAll(anncer->p_no,roboname,"#");
woomp();
} else {
+#ifdef FO_BIAS
+ faceoffbias = 0;
+#endif /*FO_BIAS*/
messAll(anncer->p_no,roboname,"#");
messAll(me->p_no, roboname,"# END OF PERIOD.");
messAll(anncer->p_no,roboname,"#");
@@ -288,7 +317,13 @@
}
messAll(me->p_no,roboname,"<thunk!>");
me->p_x = 45000 + random()%10000; /* reappear */
+#ifdef FO_BIAS
+ if (scores[KLI] >= (scores[ORI]+5)) faceoffbias = 1;
+ if (scores[ORI] >= (scores[KLI]+5)) faceoffbias = -1;
+ me->p_y = R_MID + FACEOFF_HELP * faceoffbias;
+#else /*FO_BIAS */
me->p_y = R_MID;
+#endif /*FO_BIAS */
me->p_speed = 0; /* *** BAV *** */
me->p_desspeed = 0;
me->p_subspeed = 0;
@@ -378,6 +413,9 @@
else{
#endif
do_goal(ORI);
+#ifdef FO_BIAS
+ faceoffbias = -1;
+#endif /*FO_BIAS*/
#ifdef OFFSIDE
}
#endif
@@ -397,6 +435,10 @@
else{
#endif
do_goal(KLI);
+#ifdef FO_BIAS
+ faceoffbias = 1;
+#endif /*FO_BIAS*/
+
#ifdef OFFSIDE
}
#endif
@@ -949,11 +991,15 @@
/*Place people on opposite sides of the rink*/
if (j->p_team == KLI){
j->p_x = track->t_x = SITOUT_X;
+#ifdef SITOUT_HURTS
j->p_y = track->t_y = KLI_B + (random() % (2*DISPLACE) - DISPLACE);
+#endif /*SITOUT_HURTS */
}
else if (j->p_team == ORI){
j->p_x = track->t_x = GWIDTH - SITOUT_X;
+#ifdef SITOUT_HURTS
j->p_y = track->t_y = ORI_B + (random() % (2*DISPLACE) - DISPLACE);
+#endif /*SITOUT_HURTS*/
}
else
return; /*Not ORI, not KLI, so do nothing... Weird*/
@@ -987,10 +1033,11 @@
j->p_desspeed = 0;
j->p_subspeed = 0;
j->p_flags = PFSHIELD;
+#ifdef SITOUT_HURTS
j->p_fuel = 0; /*Hah, you're hosed anyway */
j->p_damage = j->p_ship.s_maxdamage - 5;
j->p_shield = j->p_ship.s_maxshield; /*OK, a potential help */
-
+#endif /*SITOUT_HURTS*/
}
void do_offsides(void)
@@ -1599,6 +1646,13 @@
messAll(me->p_no,roboname,"#");
}
}
+
+#ifdef PUCK_FIRST
+ if (sem_puck > -1)
+ {
+ semop(sem_puck, sem_puck_op, 1);
+ }
+#endif /*PUCK_FIRST*/
freeslot(me);
freeslot(anncer);
_______________________________________________
vanilla-devel mailing list
vanilla-devel at us.netrek.org
https://mailman.real-time.com/mailman/listinfo/vanilla-devel