Date: Wednesday June 19, 2002 @ 1:50 Author: cameron Update of /home/netrek/cvsroot/Vanilla/ntserv In directory swashbuckler.real-time.com:/var/tmp/cvs-serv27196/ntserv Modified Files: ntscmds.c redraw.c Log Message: add midflight wobble suppression **************************************** Index: Vanilla/ntserv/ntscmds.c diff -u Vanilla/ntserv/ntscmds.c:1.21 Vanilla/ntserv/ntscmds.c:1.22 --- Vanilla/ntserv/ntscmds.c:1.21 Tue May 21 01:17:28 2002 +++ Vanilla/ntserv/ntscmds.c Wed Jun 19 01:50:57 2002 @@ -1,4 +1,4 @@ -/* $Id: ntscmds.c,v 1.21 2002/05/21 06:17:28 cameron Exp $ +/* $Id: ntscmds.c,v 1.22 2002/06/19 06:50:57 cameron Exp $ */ /* @@ -61,6 +61,7 @@ void do_time_msg(char *comm, struct message *mess); void do_sbtime_msg(char *comm, struct message *mess); void do_queue_msg(char *comm, struct message *mess); +void do_nowobble(char *comm, struct message *mess); #ifdef GENO_COUNT void do_genos_query(char *comm, struct message *mess, int who); @@ -142,6 +143,10 @@ "Show how many people are on the queue.", do_queue_msg }, /* QUEUE */ { "(type QUEUE HOSTS to see the addresses of those on queue)", C_DESC }, + { "NOWOBBLE", + 0, + "Test new wobble on planet lock fix.", + do_nowobble }, /* NOWOBBLE */ { "TIME", C_PR_INPICKUP, "Show time left on surrender timer.", @@ -657,6 +662,22 @@ queues[i].q_name); } } +} + +/* test wobble lock code */ +int nowobble; +void do_nowobble(char *comm, struct message *mess) +{ + int who; + char *addr; + + who = mess->m_from; + addr = addr_mess(who,MINDIV); + + nowobble = atoi(comm+strlen("nowobble ")); + + pmessage(who, MINDIV, addr, "No wobble fix is now %s [%d] {%s}", + nowobble ? "on (new test mode)" : "off (classic mode)", nowobble, comm ); } #ifdef TRIPLE_PLANET_MAYHEM Index: Vanilla/ntserv/redraw.c diff -u Vanilla/ntserv/redraw.c:1.12 Vanilla/ntserv/redraw.c:1.13 --- Vanilla/ntserv/redraw.c:1.12 Tue Feb 5 16:52:58 2002 +++ Vanilla/ntserv/redraw.c Wed Jun 19 01:50:57 2002 @@ -617,10 +617,32 @@ orbit(); } else { + int ax, ay, ad, missing; + extern int nowobble; + + /* calculate course to planet from current coordinates */ course = newcourse(pln->pl_x, pln->pl_y); - /* jac: avoid superfluous midflight wobble */ - if ( (ABS(course-me->p_desdir) > 2) || (dist < ENTORBDIST*10) ) - set_course(course); + + /* avoid superfluous midflight wobble */ + if (nowobble) { + /* test case; at 6 o'clock on earth, lock on altair, warp 8 */ + /* calculate arrival point at current course */ + ax = (double) (me->p_x + Cos[me->p_desdir] * dist); + ay = (double) (me->p_y + Sin[me->p_desdir] * dist); + ad = hypot((double) (ax - pln->pl_x), + (double) (ay - pln->pl_y)); + + /* change to the corrected course if the expected error + exceeds the remaining distance divided by the nowobble + factor (25 works well) */ + missing = (ad > dist / nowobble); + if (missing) + set_course(course); + } else { + /* classical behaviour */ + if ( (ABS(course-me->p_desdir) > 2) || (dist < ENTORBDIST*10) ) + set_course(course); + } } } }