Update of /cvsroot/netrek/server/Vanilla/ntserv In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13843/ntserv Modified Files: Makefile.in daemonII.c detonate.c phaser.c torp.c Added Files: conquer.c Log Message: conquest gloat Index: phaser.c =================================================================== RCS file: /cvsroot/netrek/server/Vanilla/ntserv/phaser.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- phaser.c 23 Apr 2006 13:30:41 -0000 1.2 +++ phaser.c 24 Apr 2006 10:12:18 -0000 1.3 @@ -29,7 +29,7 @@ U_LONG range_sq, this_range_sq; struct phaser *mine = &phasers[me->p_no]; - if (status->gameup & GU_GLOAT_CONQUER) return; + if (status->gameup & GU_CONQUER) return; if (mine->ph_status != PHFREE) { new_warning(32, "Phasers have not recharged."); --- NEW FILE: conquer.c --- #include "copyright.h" #include "config.h" #include "defs.h" #include "struct.h" #include "data.h" /* conquest gloating parade */ static int conquer_player; /* player number that won */ static int conquer_planet; /* planet they won at */ static int conquer_timer; /* countdown timer */ #define CONQUER_TIMER_BEGIN 100 /* total parade length in ticks */ #define CONQUER_TIMER_DECLOAK 90 /* threshold to decloak all */ #define CONQUER_TIMER_PARADE 40 /* threshold to complete parade */ #define CONQUER_TIMER_GOODBYE 10 /* threshold to say goodbye */ #define CONQUER_RING_RADIUS 5 /* orbital radius of ring */ /* total bandwidth cost is 2000 bytes per second per slot over ten seconds */ /* borrowed from daemonII.c until we find a better place */ #define TORPFUSE 1 #define PLASMAFUSE 1 #define PLAYERFUSE 1 /* force decloak and visibility of all ships */ static void conquer_decloak() { int h; struct player *j; for (h = 0, j = &players[0]; h < MAXPLAYER; h++, j++) { if (j->p_status == PFREE) continue; j->p_flags &= ~PFCLOAK; j->p_flags |= PFSEEN; } } /* cancel any inflight plasma, we want the plasma slots */ static void conquer_deplasma() { struct torp *t; for (t = firstPlasma; t <= lastPlasma; t++) { t->t_status = TFREE; } } /* count the number of players to be paraded */ static int conquer_count_players() { int n, h; struct player *j; for (n = 0, h = 0, j = &players[0]; h < MAXPLAYER; h++, j++) { if (j->p_status == PFREE) continue; if (j->p_no == conquer_player) continue; n++; } return n; } /* calculate parade ring coordinates */ static void conquer_ring_coordinates(struct player *j, int h, int n, int *x, int *y) { j->p_dir = h*256/(n+1); j->p_desdir = j->p_dir; *x = planets[conquer_planet].pl_x + (ORBDIST * CONQUER_RING_RADIUS) * Cos[(u_char) (j->p_dir - (u_char) 64)]; *y = planets[conquer_planet].pl_y + (ORBDIST * CONQUER_RING_RADIUS) * Sin[(u_char) (j->p_dir - (u_char) 64)]; } /* animate a ring of plasma, in expanding spiral */ static void conquer_plasma_ring() { struct torp *k; int np = 0, pn = 0; int radius = (CONQUER_TIMER_BEGIN - conquer_timer) * CONQUER_RING_RADIUS * ORBDIST / CONQUER_TIMER_BEGIN; for (k = firstPlasma; k <= lastPlasma; k++, k++) { np++; } for (k = firstPlasma; k <= lastPlasma; k++, k++, pn++) { k->t_status = TMOVE; k->t_type = TPLASMA; k->t_attribute = 0; k->t_owner = conquer_player; k->t_dir = (pn*256/np)+conquer_timer; k->t_x = planets[conquer_planet].pl_x + radius * Cos[(u_char) (k->t_dir - (u_char) 64)]; k->t_y = planets[conquer_planet].pl_y + radius * Sin[(u_char) (k->t_dir - (u_char) 64)]; k->t_turns = k->t_damage = k->t_gspeed = k->t_fuse = 1; k->t_war = players[conquer_player].p_war; k->t_team = players[conquer_player].p_team; k->t_whodet = NODET; } } /* explode the ring of plasma */ static void conquer_plasma_explode() { struct torp *k; int np = 0, pn = 0; for (k = firstPlasma; k <= lastPlasma; k++, k++) { np++; } for (k = firstPlasma; k <= lastPlasma; k++, k++, pn++) { k->t_status = TEXPLODE; k->t_fuse = 10/TORPFUSE; } } /* animate a ring of ships, move them slowly into position */ static void conquer_ships_ring() { int n, h; struct player *j; conquer_decloak(); n = conquer_count_players(); for (h = 0, j = &players[0]; h < MAXPLAYER; h++, j++) { int x, y, dx, dy; if (j->p_status == PFREE) continue; if (j->p_no == conquer_player) continue; conquer_ring_coordinates(j, h, n, &x, &y); dx = j->p_x - x; dy = j->p_y - y; if (abs(dx) < 50) { j->p_x = x; j->p_y = y; } else { j->p_x = j->p_x - (dx / 10); j->p_y = j->p_y - (dy / 10); } } } /* force the ring of ships into final position */ static void conquer_parade() { int n, h; struct player *j; n = conquer_count_players(); for (h = 0, j = &players[0]; h < MAXPLAYER; h++, j++) { if (j->p_status == PFREE) continue; if (j->p_no == conquer_player) continue; conquer_ring_coordinates(j, h, n, &j->p_x, &j->p_y); j->p_speed = 0; } } /* explode the ring of ships */ static void conquer_ships_explode() { int h; struct player *j; for (h = 0, j = &players[0]; h < MAXPLAYER; h++, j++) { if (j->p_status == PFREE) continue; #ifdef NEWBIESERVER /* Don't kill newbie robot. */ if (status->gameup & GU_NEWBIE && j->p_flags & PFROBOT) continue; #endif #ifdef PRETSERVER /* Don't kill pre-T robot. */ if (status->gameup & GU_PRET && j->p_flags & PFROBOT) continue; #endif j->p_status = PEXPLODE; j->p_whydead = KWINNER; j->p_whodead = conquer_player; if (j->p_ship.s_type == STARBASE) j->p_explode = 2*SBEXPVIEWS/PLAYERFUSE; else j->p_explode = 10/PLAYERFUSE; j->p_ntorp = 0; j->p_nplasmatorp = 0; } } /* reset the galaxy after conquer */ static void conquer_galaxy_reset() { int i; doResources(); for (i = 0; i <= MAXTEAM; i++) { teams[i].s_turns = 0; teams[i].s_surrender = 0; } } static void conquer_end() { conquer_ships_explode(); conquer_galaxy_reset(); } /* manage the animation sequence */ /* called by daemon once per tick while in a GU_CONQUER pause */ void conquer_update() { conquer_timer--; if (conquer_timer == CONQUER_TIMER_DECLOAK) { conquer_decloak(); conquer_deplasma(); } if (conquer_timer < CONQUER_TIMER_DECLOAK) { conquer_plasma_ring(); conquer_ships_ring(); } if (conquer_timer == CONQUER_TIMER_PARADE) conquer_parade(); if (conquer_timer == CONQUER_TIMER_GOODBYE) pmessage(0, MALL, "GOD->ALL", "Goodbye."); if (conquer_timer > 0) return; status->gameup &= ~(GU_PAUSED|GU_CONQUER); conquer_plasma_explode(); conquer_end(); } /* begin a conquer parade sequence */ void conquer_begin(struct player *winner) { #ifdef NOCONQUERPARADE conquer_end(); #else status->gameup |= GU_CONQUER|GU_PAUSED; conquer_player = winner->p_no; conquer_planet = winner->p_planet; conquer_timer = CONQUER_TIMER_BEGIN; #endif } /* Hey Emacs! * Local Variables: * c-file-style:"bsd" * End: */ Index: Makefile.in =================================================================== RCS file: /cvsroot/netrek/server/Vanilla/ntserv/Makefile.in,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- Makefile.in 22 Apr 2006 11:31:53 -0000 1.5 +++ Makefile.in 24 Apr 2006 10:12:17 -0000 1.6 @@ -43,7 +43,8 @@ D_OBJS = daemonII.o sintab.o sysdefaults.o slotmaint.o \ util.o $(RANDOMO) getship.o smessage.o queue.o \ - wander2.o openmem.o solicit.o ltd_stats.o libnetrek.a + wander2.o openmem.o solicit.o ltd_stats.o conquer.o \ + libnetrek.a # Src files Index: torp.c =================================================================== RCS file: /cvsroot/netrek/server/Vanilla/ntserv/torp.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- torp.c 23 Apr 2006 13:30:41 -0000 1.2 +++ torp.c 24 Apr 2006 10:12:18 -0000 1.3 @@ -53,7 +53,7 @@ static LONG last_torp_fired_update = 0; struct torp *k; - if (status->gameup & GU_GLOAT_CONQUER) return; + if (status->gameup & GU_CONQUER) return; /* * Prevent player from firing more than one torp per update. */ Index: detonate.c =================================================================== RCS file: /cvsroot/netrek/server/Vanilla/ntserv/detonate.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- detonate.c 23 Apr 2006 13:30:41 -0000 1.2 +++ detonate.c 24 Apr 2006 10:12:18 -0000 1.3 @@ -20,7 +20,7 @@ struct player *j; struct torp *t; - if (status->gameup & GU_GLOAT_CONQUER) return; + if (status->gameup & GU_CONQUER) return; if (me->p_fuel < myship->s_detcost) { new_warning(UNDEF, "Not enough fuel to detonate"); Index: daemonII.c =================================================================== RCS file: /cvsroot/netrek/server/Vanilla/ntserv/daemonII.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- daemonII.c 23 Apr 2006 13:30:41 -0000 1.10 +++ daemonII.c 24 Apr 2006 10:12:17 -0000 1.11 @@ -101,7 +101,6 @@ static void exitDaemon(int sig); static void save_planets(void); static void checkgen(int loser, struct player *winner); -static void gloat_conquer_timer(); static int checkwin(struct player *winner); static void ghostmess(struct player *victim); static void saveplayer(struct player *victim); @@ -119,7 +118,7 @@ static void conquerMessage(int winner); static void displayBest(FILE *conqfile, int team, int type); static void fork_robot(int robot); -static void doResources(void); +void doResources(void); /* static void doRotateGalaxy(void); */ static void signal_servers(void); @@ -569,7 +568,7 @@ if (status->gameup & GU_PAUSED){ /* Game is paused */ if (fuse(PLAYERFUSE)) udplayerpause(); - if (status->gameup & GU_GLOAT_CONQUER) gloat_conquer_timer(); + if (status->gameup & GU_CONQUER) conquer_update(); signal_servers(); (void) SIGNAL(SIGALRM, move); return; @@ -3710,106 +3709,6 @@ /* constants (now in defs.h). 30-60 min for a coup. 4/15/92 TC */ } -#define GLOAT_TIMER_BEGIN 100 -#define GLOAT_TIMER_DECLOAK 90 -#define GLOAT_TIMER_PARADE 40 -#define GLOAT_TIMER_GOODBYE 10 - -int gloat_player; -int gloat_planet; -int gloat_timer; - -static void gloat_conquer_decloak() -{ - int h; - struct player *j; - - for (h = 0, j = &players[0]; h < MAXPLAYER; h++, j++) { - if (j->p_status == PFREE) continue; - if (j->p_flags & PFCLOAK) { - j->p_flags &= ~PFCLOAK; - // players[i].p_cloakphase--; - } - } -} - -static void gloat_conquer_parade() -{ - int i, h; - struct player *j; - - for (i = 0, h = 0, j = &players[0]; h < MAXPLAYER; h++, j++) { - if (j->p_status == PFREE) continue; - if (j->p_no == gloat_player) continue; - i++; - } - for (h = 0, j = &players[0]; h < MAXPLAYER; h++, j++) { - if (j->p_status == PFREE) continue; - if (j->p_no == gloat_player) continue; - j->p_dir = h*256/i; - j->p_desdir = j->p_dir; - j->p_x = planets[gloat_planet].pl_x + (ORBDIST * 5) - * Cos[(u_char) (j->p_dir - (u_char) 64)]; - j->p_y = planets[gloat_planet].pl_y + (ORBDIST * 5) - * Sin[(u_char) (j->p_dir - (u_char) 64)]; - } -} - -static void gloat_conquer_kill() -{ - int h; - struct player *j; - - for (h = 0, j = &players[0]; h < MAXPLAYER; h++, j++) { - if (j->p_status == PFREE) continue; -#ifdef NEWBIESERVER - /* Don't kill newbie robot. */ - if (status->gameup & GU_NEWBIE && j->p_flags & PFROBOT) continue; -#endif -#ifdef PRETSERVER - /* Don't kill pre-T robot. */ - if (status->gameup & GU_PRET && j->p_flags & PFROBOT) continue; -#endif - j->p_status = PEXPLODE; - j->p_whydead = KWINNER; - j->p_whodead = gloat_player; - if (j->p_ship.s_type == STARBASE) - j->p_explode = 2*SBEXPVIEWS/PLAYERFUSE; - else - j->p_explode = 10/PLAYERFUSE; - j->p_ntorp = 0; - j->p_nplasmatorp = 0; - } -} - -static void gloat_conquer_reset() -{ - int i; - - doResources(); - ERROR(2,("Resetting galaxy after Conquer.\n")); - for (i = 0; i <= MAXTEAM; i++) { - teams[i].s_turns = 0; - teams[i].s_surrender = 0; - } -} - -static void gloat_conquer_timer() -{ - gloat_timer--; - if (gloat_timer == GLOAT_TIMER_DECLOAK) - gloat_conquer_decloak(); - if (gloat_timer == GLOAT_TIMER_PARADE) - gloat_conquer_parade(); - if (gloat_timer == GLOAT_TIMER_GOODBYE) - pmessage(0, MALL, "GOD->ALL", "Goodbye."); - if (gloat_timer > 0) return; - - status->gameup &= ~(GU_PAUSED|GU_GLOAT_CONQUER); - gloat_conquer_kill(); - gloat_conquer_reset(); -} - /* This function is called when a planet has been taken over. It checks all the planets to see if the victory conditions are right. If so, it blows everyone out of the game and @@ -3869,10 +3768,7 @@ for (i = 0; i < 4; i++) { if (team[1<<i] >= VICTORY) { conquerMessage(winner->p_team); - status->gameup |= GU_GLOAT_CONQUER|GU_PAUSED; - gloat_player = winner->p_no; - gloat_planet = winner->p_planet; - gloat_timer = GLOAT_TIMER_BEGIN; + conquer_begin(winner); return 1; } } @@ -4393,7 +4289,7 @@ { 31, 32, 33, 35, 36,}, }; -static void doResources(void) +void doResources(void) { int i, j, k, which; MCOPY(pdata, planets, sizeof(pdata)); @@ -4447,7 +4343,7 @@ } } #else -static void doResources(void) +void doResources(void) { int i; int agricount[4];