Update of /cvsroot/netrek/client/netrekxp/src
In directory sc8-pr-cvs16:/tmp/cvs-serv31445/src
Modified Files:
beeplite.c data.c death.c defaults.c feature.c findslot.c
getship.c inform.c input.c local.c map.c mswindow.c newwin.c
planetlist.c playerlist.c socket.c
Log Message:
A bunch of paradise additions, mostly separated by #ifdef's but a few things
impact outside that condition, which are listed below.
1) Added paradise ships (CL, CV, FL, JS, PT, UT, WB) bitmap set and
bitmaps for stars (local and map).
2) New function W_WriteRectangle, only used in paradise gridbox
drawing, but it's available for general use.
3) Removed unused PLCLEAR flag. It overlapped with a paradise flag,
and it wasn't used at all with current code so I just removed it.
4) Moved the redrawall = 0 from near top of main map function to bottom.
I don't see any harm in doing this, and it was necessary to get a paradise
draw function to work.
5) The BIGBITMAP_WIDTH size was changed from 240x240 to 500x500
to accomodate MOTD pics from paradise servers. Again I don't see any
harm in increasing size. And this wasn't even used with bitmap storage,
the StoreBitmap() function had been completely phased out.
Along the way of adding in paradise functionality, numerous problems with
defines have come up, ie MAXSECTOR, GWIDTH, ship array, and most
seriously, overlapping packet types.
There are also very serious problems with overlapping p_flag and p_status
values, namely observers overlap with warp states and tournament queue
status. Some p_whydead messages also overlap. Also paradise servers
send phaser damage caps differently.
Things that could use work are the motd paging system (gutted it for sake
of simplicity), planet window (paradise has 2 planet windows, also sorting
doesn't work), a bunch of gridline/zoom options should be made into
netrekrc options. The galactic zoom doesn't work. Ships disappear while
warping (due to the aforementioned problem with PFOBSERV overlap
with PFWARP). Most of the paradise packet types, including special
weapons and game parameters, are still not handled. Gwidth is not
malleable based on paradise vs bronco server. No color ship bitmaps
were added. No special items other than stars were added. No new
weapon types like fighters were added. A bunch of keys like afterburners
and engage warp don't exist. Info windows and rank windows not
working right with paradise.
Index: getship.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/getship.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- getship.c 15 Jun 2006 05:09:04 -0000 1.4
+++ getship.c 17 May 2007 08:49:48 -0000 1.5
@@ -145,6 +145,128 @@
shipvals[CRUISER].s_type = CRUISER; /* cruiser: */
shipvals[CRUISER].s_phaserfuse = 10; /* cruiser: */
shipvals[CRUISER].s_repair = 110; /* cruiser: */
+
+#ifdef PARADISE
+ shipvals[JUMPSHIP].s_phaserdamage = 25;
+ shipvals[JUMPSHIP].s_torpspeed = 18;
+ shipvals[JUMPSHIP].s_maxspeed = 20;
+ shipvals[JUMPSHIP].s_maxfuel = 50000;
+ shipvals[JUMPSHIP].s_maxarmies = 0;
+ shipvals[JUMPSHIP].s_maxshield = 5;
+ shipvals[JUMPSHIP].s_maxdamage = 60;
+ shipvals[JUMPSHIP].s_maxwpntemp = 1300;
+ shipvals[JUMPSHIP].s_maxegntemp = 5000;
+ shipvals[JUMPSHIP].s_type = JUMPSHIP;
+ shipvals[JUMPSHIP].s_width = 20;
+ shipvals[JUMPSHIP].s_height = 20;
+ shipvals[JUMPSHIP].s_phaserfuse = 4;
+ shipvals[JUMPSHIP].s_repair = 200;
+
+ shipvals[FLAGSHIP].s_phaserdamage = 102;
+ shipvals[FLAGSHIP].s_torpspeed = 12;
+ shipvals[FLAGSHIP].s_maxspeed = 9;
+ shipvals[FLAGSHIP].s_maxfuel = 12500;
+ shipvals[FLAGSHIP].s_maxarmies = 6;
+ shipvals[FLAGSHIP].s_maxshield = 115;
+ shipvals[FLAGSHIP].s_maxdamage = 115;
+ shipvals[FLAGSHIP].s_maxwpntemp = 1000;
+ shipvals[FLAGSHIP].s_maxegntemp = 1500;
+ shipvals[FLAGSHIP].s_type = FLAGSHIP;
+ shipvals[FLAGSHIP].s_width = 20;
+ shipvals[FLAGSHIP].s_height = 20;
+ shipvals[FLAGSHIP].s_phaserfuse = 10;
+ shipvals[FLAGSHIP].s_repair = 118;
+
+ shipvals[WARBASE].s_phaserdamage = 125;
+ shipvals[WARBASE].s_torpspeed = 15;
+ shipvals[WARBASE].s_maxspeed = 3;
+ shipvals[WARBASE].s_maxfuel = 50000;
+ shipvals[WARBASE].s_maxarmies = 0;
+ shipvals[WARBASE].s_maxshield = 250;
+ shipvals[WARBASE].s_maxdamage = 500;
+ shipvals[WARBASE].s_maxwpntemp = 1500;
+ shipvals[WARBASE].s_maxegntemp = 1000;
+ shipvals[WARBASE].s_type = WARBASE;
+ shipvals[WARBASE].s_width = 20;
+ shipvals[WARBASE].s_height = 20;
+ shipvals[WARBASE].s_phaserfuse = 5;
+ shipvals[WARBASE].s_repair = 170;
+
+ shipvals[LIGHTCRUISER].s_phaserdamage = 90;
+ shipvals[LIGHTCRUISER].s_torpspeed = 13;
+ shipvals[LIGHTCRUISER].s_maxspeed = 10;
+ shipvals[LIGHTCRUISER].s_maxfuel = 8500;
+ shipvals[LIGHTCRUISER].s_maxarmies = 3;
+ shipvals[LIGHTCRUISER].s_maxshield = 95;
+ shipvals[LIGHTCRUISER].s_maxdamage = 90;
+ shipvals[LIGHTCRUISER].s_maxwpntemp = 1000;
+ shipvals[LIGHTCRUISER].s_maxegntemp = 1500;
+ shipvals[LIGHTCRUISER].s_type = LIGHTCRUISER;
+ shipvals[LIGHTCRUISER].s_width = 20;
+ shipvals[LIGHTCRUISER].s_height = 20;
+ shipvals[LIGHTCRUISER].s_phaserfuse = 10;
+ shipvals[LIGHTCRUISER].s_repair = 80;
+
+ shipvals[CARRIER].s_phaserdamage = 95;
+ shipvals[CARRIER].s_torpspeed = 13;
+ shipvals[CARRIER].s_maxspeed = 9;
+ shipvals[CARRIER].s_maxfuel = 15000;
+ shipvals[CARRIER].s_maxarmies = 3;
+ shipvals[CARRIER].s_maxshield = 120;
+ shipvals[CARRIER].s_maxdamage = 150;
+ shipvals[CARRIER].s_maxwpntemp = 1000;
+ shipvals[CARRIER].s_maxegntemp = 1500;
+ shipvals[CARRIER].s_type = CARRIER;
+ shipvals[CARRIER].s_width = 20;
+ shipvals[CARRIER].s_height = 20;
+ shipvals[CARRIER].s_phaserfuse = 6;
+ shipvals[CARRIER].s_repair = 105;
+
+ shipvals[UTILITY].s_phaserdamage = 80;
+ shipvals[UTILITY].s_torpspeed = 15;
+ shipvals[UTILITY].s_maxspeed = 7;
+ shipvals[UTILITY].s_maxfuel = 16000;
+ shipvals[UTILITY].s_maxarmies = 12;
+ shipvals[UTILITY].s_maxshield = 120;
+ shipvals[UTILITY].s_maxdamage = 220;
+ shipvals[UTILITY].s_maxwpntemp = 1000;
+ shipvals[UTILITY].s_maxegntemp = 1800;
+ shipvals[UTILITY].s_type = UTILITY;
+ shipvals[UTILITY].s_width = 20;
+ shipvals[UTILITY].s_height = 20;
+ shipvals[UTILITY].s_phaserfuse = 8;
+ shipvals[UTILITY].s_repair = 120;
+
+ shipvals[PATROL].s_phaserdamage = 50;
+ shipvals[PATROL].s_torpspeed = 15;
+ shipvals[PATROL].s_maxspeed = 13;
+ shipvals[PATROL].s_maxfuel = 4000;
+ shipvals[PATROL].s_maxarmies = 1;
+ shipvals[PATROL].s_maxshield = 50;
+ shipvals[PATROL].s_maxdamage = 40;
+ shipvals[PATROL].s_maxwpntemp = 1000;
+ shipvals[PATROL].s_maxegntemp = 1500;
+ shipvals[PATROL].s_type = PATROL;
+ shipvals[PATROL].s_width = 20;
+ shipvals[PATROL].s_height = 20;
+ shipvals[PATROL].s_phaserfuse = 8;
+ shipvals[PATROL].s_repair = 50;
+
+ shipvals[PUCK].s_phaserdamage = 75;
+ shipvals[PUCK].s_torpspeed = 16;
+ shipvals[PUCK].s_maxspeed = 12;
+ shipvals[PUCK].s_maxfuel = 5000;
+ shipvals[PUCK].s_maxarmies = 2;
+ shipvals[PUCK].s_maxshield = 75;
+ shipvals[PUCK].s_maxdamage = 75;
+ shipvals[PUCK].s_maxwpntemp = 1000;
+ shipvals[PUCK].s_maxegntemp = 1000;
+ shipvals[PUCK].s_type = PUCK;
+ shipvals[PUCK].s_width = 20;
+ shipvals[PUCK].s_height = 20;
+ shipvals[PUCK].s_phaserfuse = 10;
+ shipvals[PUCK].s_repair = 80;
+#endif
}
/******************************************************************************/
Index: mswindow.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/mswindow.c,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -d -r1.82 -r1.83
--- mswindow.c 27 Apr 2007 10:04:19 -0000 1.82
+++ mswindow.c 17 May 2007 08:49:49 -0000 1.83
@@ -323,11 +323,11 @@
};
#ifndef SCALE_BITMAPS
-#define BIGBITMAP_WIDTH 240
-#define BIGBITMAP_HEIGHT 240
+#define BIGBITMAP_WIDTH 500
+#define BIGBITMAP_HEIGHT 500
#else
-static int BIGBITMAP_WIDTH = 240;
-static int BIGBITMAP_HEIGHT = 240;
+static int BIGBITMAP_WIDTH = 500;
+static int BIGBITMAP_HEIGHT = 500;
#endif
struct BitmapList
@@ -3607,6 +3607,50 @@
ReleaseDC (win->hwnd, hdc);
}
+//Draw a rectangle
+void
+W_WriteRectangle (W_Window window,
+ int x,
+ int y,
+ int width,
+ int height,
+ int dashed,
+ W_Color color)
+{
+ POINT points[4];
+ DBHEADER_VOID;
+
+ x += win->border;
+ y += win->border;
+
+ points[0].x = x;
+ points[0].y = y;
+ points[1].x = x + width;
+ points[1].y = y;
+ points[2].x = x + width;
+ points[2].y = y + height;
+ points[3].x = x;
+ points[3].y = y + height;
+
+ if (NetrekPalette)
+ {
+ SelectPalette (hdc, NetrekPalette, FALSE);
+ RealizePalette (hdc);
+ }
+ if (dashed)
+ {
+ SetBkColor (hdc, colortable[BLACK].rgb);
+ SelectObject (hdc, colortable[color].dashedpen);
+ }
+ else
+ SelectObject (hdc, colortable[color].pen);
+ SelectObject (hdc, GetStockObject (NULL_BRUSH));
+
+ Polygon (hdc, points, 4);
+
+ if (!sdb || !doubleBuffering || !ingame)
+ ReleaseDC (win->hwnd, hdc);
+}
//Put some text in a window. This is a straight ExtTextOut call if it's a
//graphics window, a ExtTextOut call with mapped coordinates if it's a
Index: newwin.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/newwin.c,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -d -r1.63 -r1.64
--- newwin.c 13 Apr 2007 09:10:16 -0000 1.63
+++ newwin.c 17 May 2007 08:49:49 -0000 1.64
@@ -36,6 +36,23 @@
static int line = 0;
int MaxMotdLine = 0;
+#ifdef PARADISE
+#define LINESPERPAGE 38
+#else
+#define LINESPERPAGE 28
+#endif
+
+#ifdef PARADISE
+#define S_MOTD 0
+#define S_SYSDEF 1
+#define S_CREDITS 2
+#define S_MAX 3
+static void showPics (W_Window win, int atline);
+int newMotdStuff = 0; /* set to 1 when new motd packets arrive */
+static struct piclist *motdPics = NULL;
+static struct piclist **motd_buftail = &motdPics;
+#endif
+
/* if a motd line from the server is this, the client will junk all motd *
* data it currently has. New data may be received */
#define MOTDCLEARLINE "\033\030CLEAR_MOTD\000"
@@ -54,6 +71,10 @@
void loadbitmapsM (void);
void loadbitmapsG (void);
void loadbitmapsHR (void);
+#ifdef PARADISE
+void loadbitmapsparadise (void);
+void loadparadisethings (void);
+#endif
void loadweaponsC (void);
void loadplanetsC (void);
@@ -429,8 +450,41 @@
}
}
+#ifdef PARADISE
/******************************************************************************/
-/*** loadweaponsHR() - high quality ship bitmaps, 80x80
+/*** loadbitmapsParadise()
+/******************************************************************************/
+void loadbitmapsParadise()
+{
+ int j, k;
+
+ if ( access("bitmaps/shiplib/paradise_ships.bmp", R_OK) == 0 )
+ {
+ paradise_ship_bitmaps =
+ W_StoreBitmap3 ("bitmaps/shiplib/paradise_ships.bmp", BMP_SHIP_WIDTH * NUM_PSHIP_TYPES,
+ BMP_SHIP_HEIGHT * NUMTEAMS, BMP_PSHIP, w, LR_MONOCHROME);
+ }
+ else // No paradise ship bitmaps, doh!
+ {
+ LineToConsole("Failed to load paradise bitmaps, defaulting to cruiser for all ships.\n");
+ noParadiseBitmaps = 1;
+ return;
+ }
+
+ for (j = 0; j < NUM_PSHIP_TYPES; j++)
+ {
+ for (k = 0; k < NUMTEAMS; k++)
+ {
+ paradise_ships[j][k] =
+ W_PointBitmap2 (paradise_ship_bitmaps, j, k, BMP_SHIP_WIDTH,
+ BMP_SHIP_HEIGHT);
+ }
+ }
+}
+#endif
+
+/******************************************************************************/
+/*** loadbitmapsHR() - high quality ship bitmaps, 80x80
/******************************************************************************/
void loadbitmapsHR()
{
@@ -767,6 +821,29 @@
LR_DEFAULTCOLOR);
}
+#ifdef PARADISE
+/******************************************************************************/
+/*** loadparadisethings() - misc paradise art like stars, wormholes, etc
+/******************************************************************************/
+void loadparadisethings (void)
+{
+ int i;
+
+ base_star_bitmap =
+ W_StoreBitmap3 ("bitmaps/misclib/color/star.bmp", BMP_STAR_WIDTH,
+ BMP_STAR_HEIGHT * STAR_VIEWS, BMP_STAR, w,
+ LR_DEFAULTCOLOR);
+ for (i = 0; i < STAR_VIEWS; i++)
+ star_bitmap[i] =
+ W_PointBitmap2 (base_star_bitmap, 0, i, BMP_STAR_WIDTH, BMP_STAR_HEIGHT);
+
+ star_mbitmap =
+ W_StoreBitmap3 ("bitmaps/misclib/color/starm.bmp", BMP_MSTAR_WIDTH,
+ BMP_MSTAR_HEIGHT, BMP_MSTAR, mapw,
+ LR_DEFAULTCOLOR);
+}
+#endif
+
/******************************************************************************/
/*** handleMessageWindowKeyDown()
/******************************************************************************/
@@ -852,7 +929,11 @@
W_SetWindowKeyDownHandler (warnw, handleMessageWindowKeyDown);
+#ifdef PARADISE
+ planetw = W_MakeTextWindow ("planet", TWINSIDE + 2 * THICKBORDER + 10, 10, 70, MAXPLANETS + 8, baseWin, 2);
+#else
planetw = W_MakeTextWindow ("planet", TWINSIDE + 2 * THICKBORDER + 10, 10, 57, MAXPLANETS + 3, baseWin, 2);
+#endif
W_SetWindowExposeHandler (planetw, planetlist);
rankw = W_MakeTextWindow ("rank", 10, 300, 80, NUMRANKS + 9, baseWin, 2);
@@ -1149,6 +1230,9 @@
rotatePlanets = booleanDefault ("rotatePlanets", rotatePlanets);
loadplanetsC(); // Always load new color planet bitmaps..for now
loadmplanetsC();
+#ifdef PARADISE
+ loadparadisethings();
+#endif
switch (planetBitmap) // Case 3 = new color, but we never use Planlib
{
case 1:
@@ -1196,6 +1280,9 @@
loadbitmapsM();
break;
}
+#ifdef PARADISE
+ loadbitmapsParadise();
+#endif
}
else /* Load all bitmaps */
{
@@ -1205,6 +1292,9 @@
loadbitmapsT();
loadbitmapsM();
loadbitmapsHR();
+#ifdef PARADISE
+ loadbitmapsParadise();
+#endif
}
#ifdef BEEPLITE
@@ -1535,6 +1625,13 @@
updatedeath ();
if (W_IsMapped (playerw))
UpdatePlayerList ();
+#ifdef PARADISE
+ if (newMotdStuff)
+ {
+ showMotdWin (w, line);
+ //showValues(mapw);
+ }
+#endif
showTimeLeft (elapsed, autoQuit);
lasttime = time (0);
}
@@ -1605,6 +1702,29 @@
case 'o':
*s_type = STARBASE;
break;
+#ifdef PARADISE
+ case 'j':
+ *s_type = JUMPSHIP;
+ break;
+ case 'f':
+ *s_type = FLAGSHIP;
+ break;
+ case 'w':
+ *s_type = WARBASE;
+ break;
+ case 'l':
+ *s_type = LIGHTCRUISER;
+ break;
+ case 'v':
+ *s_type = CARRIER;
+ break;
+ case 'u':
+ *s_type = UTILITY;
+ break;
+ case 'p':
+ *s_type = PATROL;
+ break;
+#endif
case ' ':
switch (me->p_team)
{
@@ -1653,10 +1773,10 @@
resetting = 1;
break;
case 'f': /* Scroll motd forward */
- line = line + 28;
+ line = line + LINESPERPAGE;
if (line > MaxMotdLine)
{
- line = line - 28;
+ line = line - LINESPERPAGE;
break;
}
W_ClearWindow (w);
@@ -1665,13 +1785,14 @@
case 'b': /* Scroll motd backward */
if (line == 0)
break;
- line = line - 28;
+ line = line - LINESPERPAGE;
if (line < 0)
line = 0;
W_ClearWindow (w);
showMotdWin (w, line);
break;
- case 'F': /* Scroll motd forward */
+#ifndef PARADISE /* Paradise MOTD requires paging */
+ case 'F': /* Scroll motd a bit forwards */
line = line + 4;
if (line > MaxMotdLine)
{
@@ -1681,7 +1802,7 @@
W_ClearWindow (w);
showMotdWin (w, line);
break;
- case 'B': /* Scroll motd backward */
+ case 'B': /* Scroll motd a bit backwards */
if (line == 0)
break;
line = line - 4;
@@ -1690,6 +1811,7 @@
W_ClearWindow (w);
showMotdWin (w, line);
break;
+#endif
}
}
/* No break, we just fall through */
@@ -1942,18 +2064,30 @@
int count;
char buf[128];
+#ifdef PARADISE
+ newMotdStuff = 0; /* clear the flag */
+#endif
+
sprintf (buf, "--- %s ---", (char *) query_cowid ());
length = strlen (buf);
center = TWINSIDE / 2 - (length * W_Textwidth) / 2;
+#ifndef PARADISE /* no space for client header in paradise */
W_WriteText (motdwin, center, W_Textheight, textColor,
buf, length, W_BoldFont);
+#endif
sprintf (buf, CBUGS);
length = strlen (buf);
center = TWINSIDE / 2 - (length * W_Textwidth) / 2;
+#ifndef PARADISE /* no space for client header in paradise */
W_WriteText (motdwin, center, 3 * W_Textheight, textColor,
buf, length, W_RegularFont);
+#endif
+#ifdef PARADISE
+ top = 0;
+#else
top = 10;
+#endif
if (first)
{
@@ -1977,7 +2111,8 @@
}
data = data->next;
}
- count = 28; /* Magical # of lines to
+
+ count = LINESPERPAGE; /* Magical # of lines to
* display */
for (i = top; i < 50; i++)
{
@@ -2000,10 +2135,50 @@
if (count <= 0)
break;
}
-
+#ifdef PARADISE
+ if (motdwin == w) {
+ W_WriteText(mapw, GWINSIDE/2 - W_Textwidth * strlen(blk_refitstring) / 2, GWINSIDE - 20, textColor, blk_refitstring,
+ strlen(blk_refitstring), W_RegularFont);
+ }
+ showPics(motdwin, atline);
+#endif
showValues (data);
}
+/******************************************************************************/
+/*** showPics() */
+/******************************************************************************/
+#ifdef PARADISE
+static void
+showPics(W_Window win, int atline)
+{
+ struct piclist *temp;
+
+ temp = motdPics;
+
+ while (temp != NULL) {
+ if (atline/LINESPERPAGE == temp->page) { /* hack for paging not working */
+ if (temp->thepic)
+ W_WriteBitmap(temp->x, temp->y, temp->thepic, foreColor, win);
+ else {
+ W_MakeLine(win, temp->x, temp->y,
+ temp->x + temp->width - 1, temp->y + temp->height - 1, W_Grey);
+ W_MakeLine(win, temp->x, temp->y + temp->height - 1,
+ temp->x + temp->width - 1, temp->y, W_Grey);
+ W_MakeLine(win, temp->x, temp->y,
+ temp->x + temp->width - 1, temp->y, W_Grey);
+ W_MakeLine(win, temp->x, temp->y,
+ temp->x, temp->y + temp->height - 1, W_Grey);
+ W_MakeLine(win, temp->x, temp->y + temp->height - 1,
+ temp->x + temp->width - 1, temp->y + temp->height - 1, W_Grey);
+ W_MakeLine(win, temp->x + temp->width - 1, temp->y + temp->height - 1,
+ temp->x + temp->width - 1, temp->y, W_Grey);
+ }
+ }
+ temp = temp->next;
+ }
+}
+#endif
/******************************************************************************/
/*** showValues()
@@ -2028,7 +2203,11 @@
W_WriteText (mapw, 20, 14 * W_Textheight, textColor, msg,
strlen (msg), W_RegularFont);
+#ifdef PARADISE
+ for (i = 16; i < 50; i++)
+#else
for (i = 16; i < 50; i += 2)
+#endif
{
if (data == NULL)
break;
@@ -2072,6 +2251,29 @@
static struct list **temp = &motddata;
static int statmode = 0; /* ATM */
+#ifdef PARADISE
+ /* Inlined blk_parsemotd() paradise client function */
+ if (strncmp("BLK: ", line, 5) == 0) {
+ /* See if it's a refit string.*/
+ if (strncmp(&line[5], "REFIT", 5) == 0) {
+ strncpy(blk_refitstring, &line[10], 79);
+ blk_refitstring[79] = '\0';
+ }
+ /* Check to see if it's a borgish feature being enabled. */
+ else if (strncmp(&line[5], "BORGISH ", 8) == 0) {
+ if (strncmp(&line[13], "FRCLOAK", 7) == 0)
+ blk_friendlycloak = 1;
+ }
+ return;
+ }
+ if ( strncmp("\t@@b", line, 4) == 0) // Between pages
+ return;
+ /*if (!currpage ||
+ (pagecount - 1) == currpage->page ||
+ motdlinestate == IN_SYSDEF) */
+ newMotdStuff = 1; /* set flag for event loop */
+ first = 1; /* check for bold again */
+#endif
if (!statmode && !strcmp (line, STATUS_TOKEN))
statmode = 1;
if (!statmode)
@@ -2097,6 +2299,41 @@
temp = &((*temp)->next);
}
+#ifdef PARADISE
+/******************************************************************************/
+/*** newMotdPic()
+/******************************************************************************/
+void
+newMotdPic(int x, int y, int width, int height, char *bits, int page)
+{
+ struct piclist *tmp;
+ struct motd_pic_spacket dummy;
+
+ if ((width + 7) / 8 * height > sizeof(dummy.bits) && bits)
+ {
+ LineToConsole("MOTD picture from server is too big! %dx%d couldn't possibly fit in the %d data bytes of the packet\n",
+ width, height, (int) sizeof(dummy.bits));
+ return;
+ }
+
+ if ((currpage && page == currpage->page) || page == 0)
+ {
+ newMotdStuff = 1; /* set flag for event loop */
+ first = 1; /* check for bold again */
+ }
+
+ tmp = (*motd_buftail) = (struct piclist *) malloc(sizeof(struct piclist));
+ tmp->next = NULL;
+ tmp->x = x;
+ tmp->y = y - 112; /* 112 is magic number of height of the paradise header
+ image which we do NOT have */
+ tmp->width = width;
+ tmp->height = height;
+ tmp->thepic = bits ? W_StoreBitmap(width, height, bits, w) : 0;
+ tmp->page = page;
+ motd_buftail = &(tmp->next);
+}
+#endif
/******************************************************************************/
/*** getResources()
Index: input.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/input.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -d -r1.39 -r1.40
--- input.c 16 May 2007 00:05:15 -0000 1.39
+++ input.c 17 May 2007 08:49:48 -0000 1.40
@@ -1292,6 +1292,43 @@
localflags &= ~(PFREFIT);
return;
break;
+#ifdef PARADISE
+ case 'j':
+ sendRefitReq (JUMPSHIP);
+ localflags &= ~(PFREFIT);
+ return;
+ break;
+ case 'f':
+ sendRefitReq (FLAGSHIP);
+ localflags &= ~(PFREFIT);
+ return;
+ break;
+ case 'w':
+ sendRefitReq (WARBASE);
+ localflags &= ~(PFREFIT);
+ return;
+ break;
+ case 'l':
+ sendRefitReq (LIGHTCRUISER);
+ localflags &= ~(PFREFIT);
+ return;
+ break;
+ case 'v':
+ sendRefitReq (CARRIER);
+ localflags &= ~(PFREFIT);
+ return;
+ break;
+ case 'u':
+ sendRefitReq (UTILITY);
+ localflags &= ~(PFREFIT);
+ return;
+ break;
+ case 'p':
+ sendRefitReq (PATROL);
+ localflags &= ~(PFREFIT);
+ return;
+ break;
+#endif
default:
localflags &= ~(PFREFIT);
return;
Index: local.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/local.c,v
retrieving revision 1.101
retrieving revision 1.102
diff -u -d -r1.101 -r1.102
--- local.c 14 May 2007 02:56:41 -0000 1.101
+++ local.c 17 May 2007 08:49:48 -0000 1.102
@@ -38,6 +38,9 @@
static int clearline[4][MAXPLAYER + 2 * MAXPLAYER];
#endif
static int planet_frame = 0;
+#ifdef PARADISE
+static int star_frame = 0;
+#endif
static int star_updates = 0;
static int last_speed = 0;
static int streaks_on = 0;
@@ -129,10 +132,10 @@
if (TWINSIDE == 0)
return;
- imax = 5 * STARSIDE / TWINSIDE + 1;
+ imax = 10 * STARSIDE / TWINSIDE + 1;
if (imax > MAXSECTORS)
imax = MAXSECTORS;
- jmax = 5 * STARSIDE / TWINSIDE + 1;
+ jmax = 10 * STARSIDE / TWINSIDE + 1;
if (jmax > MAXSECTORS)
jmax = MAXSECTORS;
kmax = 16 * TWINSIDE / STARSIDE * TWINSIDE / STARSIDE;
@@ -545,7 +548,29 @@
dx = dx / scaleFactor + TWINSIDE / 2;
dy = dy / scaleFactor + TWINSIDE / 2;
-
+
+#ifdef PARADISE
+ if (PL_TYPE(*l) == PLSTAR)
+ {
+ int j = star_frame * 10 / server_ups;
+ if ((j >= STAR_VIEWS - 1) || (j < 0))
+ {
+ j = 0;
+ star_frame = 0;
+ }
+ W_WriteScaleBitmap (dx - (BMP_STAR_WIDTH / 2) * SCALE / scaleFactor,
+ dy - (BMP_STAR_HEIGHT / 2) * SCALE / scaleFactor,
+ BMP_STAR_WIDTH * SCALE / scaleFactor,
+ BMP_STAR_HEIGHT * SCALE / scaleFactor,
+ BMP_STAR_WIDTH,
+ BMP_STAR_HEIGHT,
+ 0,
+ star_bitmap[j],
+ planetColor (l),
+ w);
+ }
+ else
+#endif
if (planetBitmap == 3)
{
W_WriteScaleBitmap (dx - (BMP_PLANET_WIDTH / 2) * SCALE / scaleFactor,
@@ -553,8 +578,8 @@
BMP_PLANET_WIDTH * SCALE / scaleFactor,
BMP_PLANET_HEIGHT * SCALE / scaleFactor,
BMP_CPLANET_WIDTH,
- BMP_CPLANET_HEIGHT,
- 0,
+ BMP_CPLANET_HEIGHT,
+ 0,
planetBitmapC (l),
planetColor (l),
w);
@@ -573,7 +598,7 @@
BMP_PLANET_WIDTH * SCALE / scaleFactor,
BMP_PLANET_HEIGHT * SCALE / scaleFactor,
BMP_PLANET_WIDTH,
- BMP_PLANET_HEIGHT,
+ BMP_PLANET_HEIGHT,
0,
getPlanetBitmap (l),
planetColor (l),
@@ -614,6 +639,9 @@
/* Allow army display if player/observer is orbitting a planet, or alternatively
if observer is locked onto a planet, or is show_army_count feature packet is on */
if ((showArmy == 1 || showArmy == 3) && (l->pl_info & me->p_team)
+#ifdef PARADISE
+ && (PL_TYPE(*l) != PLSTAR)
+#endif
&& (F_show_army_count ||
( (me->p_flags & PFORBIT) && (F_sp_generic_32 ? me->pl_orbit : get_closest_planet(me->p_x, me->p_y)) == l->pl_no)
|| ((me->p_flags & PFPLLOCK) && (me->p_flags & PFOBSERV) && (me->p_planet == l->pl_no)) ))
@@ -669,6 +697,9 @@
clearcount++;
}
planet_frame++;
+#ifdef PARADISE
+ star_frame++;
+#endif
}
@@ -719,6 +750,7 @@
int dx, dy, px, py, wx, wy, tx, ty, lx, ly;
int new_dx, new_dy;
int startx, starty, endx, endy;
+ int type;
W_Icon (*ship_bits)[SHIP_VIEWS];
W_Icon (*ship_bitsHR);
@@ -1021,6 +1053,49 @@
}
}
+ type = j->p_ship.s_type;
+#ifdef PARADISE
+ // We missing paradise bitmaps?
+ if (noParadiseBitmaps)
+ type = CRUISER;
+ // If it's a paradise ship, we only have 1 bitmap set
+ // so let's use it, rotating bitmaps realtime.
+ if (type >= PARADISE_SHIP_OFFSET)
+ {
+ int pos;
+
+ switch (j->p_team)
+ {
+ case FED:
+ pos = 0;
+ break;
+ case ROM:
+ pos = 4;
+ break;
+ case KLI:
+ pos = 2;
+ break;
+ case ORI:
+ pos = 3;
+ break;
+ default: // Ind
+ pos = 1;
+ break;
+ }
+ W_WriteScaleBitmap (dx - (j->p_ship.s_width / 2) * SCALE / scaleFactor,
+ dy - (j->p_ship.s_height / 2) * SCALE / scaleFactor,
+ j->p_ship.s_width * SCALE / scaleFactor,
+ j->p_ship.s_height * SCALE / scaleFactor,
+ BMP_SHIP_WIDTH,
+ BMP_SHIP_HEIGHT,
+ (360 * j->p_dir/255),
+ paradise_ships[type - PARADISE_SHIP_OFFSET][pos],
+ playerColor (j),
+ w);
+ }
+ else
+ {
+#endif
if (colorClient != 4)
{
W_WriteScaleBitmap (dx - (j->p_ship.s_width / 2) * SCALE / scaleFactor,
@@ -1033,8 +1108,8 @@
// pointing up position. If not, find the correct bitmap in
// the ship rosette and set angle to 0.
fullBitmapRotation ? (360 * j->p_dir/255) : 0,
- fullBitmapRotation ? ship_bits[j->p_ship.s_type][0] :
- ship_bits[j->p_ship.s_type][rosette (j->p_dir)],
+ fullBitmapRotation ? ship_bits[type][0] :
+ ship_bits[type][rosette (j->p_dir)],
playerColor (j),
w);
}
@@ -1047,10 +1122,13 @@
BMP_SHIP_WIDTH_HR,
BMP_SHIP_HEIGHT_HR,
(360 * j->p_dir/255), // Converted to angle
- ship_bitsHR[j->p_ship.s_type],
+ ship_bitsHR[type],
playerColor (j),
w);
}
+#ifdef PARADISE
+ }
+#endif
/* If the ship is not yet fully cloaked, draw the cloak icon on top
of the ship icon */
@@ -1601,12 +1679,19 @@
}
else
{
+#ifdef PARADISE
+ /* Paradise servers changed the ship cap protocol for
+ phaser damage :( */
+ tx = (int) (j->p_ship.s_phaserdamage * Cos[php->ph_dir]);
+
+ ty = (int) (j->p_ship.s_phaserdamage * Sin[php->ph_dir]);
+#else
tx = (int) (PHASEDIST * j->p_ship.s_phaserdamage / 100 *
Cos[php->ph_dir]);
ty = (int) (PHASEDIST * j->p_ship.s_phaserdamage / 100 *
Sin[php->ph_dir]);
-
+#endif
tx = (j->p_x + tx - me->p_x) / scaleFactor + TWINSIDE / 2;
ty = (j->p_y + ty - me->p_y) / scaleFactor + TWINSIDE / 2;
}
Index: findslot.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/findslot.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- findslot.c 13 Apr 2007 07:12:24 -0000 1.9
+++ findslot.c 17 May 2007 08:49:48 -0000 1.10
@@ -33,6 +33,10 @@
#define WAITTITLE 15 /* height of title for wait
* window */
+#ifdef PARADISE
+extern int newMotdStuff; /* from newwin.c */
+#endif
+
/******************************************************************************/
/*** mapWaitWin() ***/
/******************************************************************************/
@@ -157,6 +161,10 @@
LineToConsole ("Damn, We've been ghostbusted!\n");
terminate (0);
}
+#ifdef PARADISE
+ if (newMotdStuff)
+ showMotdWin(motdWin, WaitMotdLine);
+#endif
while (W_EventsPending ())
{
W_NextEvent (&event);
Index: planetlist.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/planetlist.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- planetlist.c 17 Mar 2007 01:21:49 -0000 1.7
+++ planetlist.c 17 May 2007 08:49:49 -0000 1.8
@@ -18,6 +18,11 @@
#include "data.h"
#include "proto.h"
+/* Prototypes */
+#ifdef PARADISE
+static void planet_list_paradise (void);
+static void print_planet (W_Window wind, int line, struct planet * );
+#endif
static char priorplanets[MAXPLANETS][BUFSIZ];
int planet_row[MAXPLANETS]; /* planets location in current plist */
@@ -39,6 +44,12 @@
void
planetlist (void)
{
+#ifdef PARADISE
+ if (paradise)
+ planet_list_paradise();
+ else
+ {
+#else
register int i;
char buf[BUFSIZ];
@@ -51,8 +62,197 @@
for (i = 0; i < MAXPLANETS; i++)
strcpy(priorplanets[i], "");
updatePlanetw ();
+#endif
+#ifdef PARADISE
+ }
+#endif
+}
+
+#ifdef PARADISE
+int mask_to_idx(int m)
+{
+ switch(m) {
+ case NOBODY:
+ return -1;
+ case FED:
+ return 0;
+ case ROM:
+ return 1;
+ case KLI:
+ return 2;
+ case ORI:
+ return 3;
+ default:
+ return number_of_teams;
+ }
}
+/*This function provides the planet list for a paradise server version 2.0 */
+static void planet_list_paradise (void)
+{
+ typedef struct planet *plptr;
+
+ int k = 0; /* for row number */
+ int i, team_pnum; /* looping var */
+ plptr j; /* to point to a planet */
+ char buf[100]; /* to sprintf into */
+ W_Window wind;
+ extern int number_of_teams;
+ plptr **team_p;
+ int *team_pcount;
+
+ wind = planetw;
+
+ /* this malloc stuff will handle any number of teams/races */
+
+ /* team's planet counters */
+ team_pcount = (int *) malloc((number_of_teams + 2) * sizeof(int));
+ for (i = 0; i < number_of_teams + 2; i++)
+ team_pcount[i] = 0;
+
+ if (sortPlanets) {
+ /* make some memory */
+ team_p = (plptr **) malloc((number_of_teams + 2) * sizeof(struct planet *));
+ for (i = 0; i < (number_of_teams + 2); i++)
+ team_p[i] = (plptr *) malloc(nplanets * sizeof(struct planet *));
+
+ /* loop thru and put proper team planeter point on each planet */
+ for (i = 0, j = &planets[i]; i < nplanets; i++, j++) {
+ k = mask_to_idx(j->pl_owner) + 1; /* which team gets planet */
+ team_p[k][team_pcount[k]] = j;
+ team_pcount[k]++;
+ }
+
+ /* go thru each teams planet list and display */
+ for (i = 0, k = 0; i < (number_of_teams + 2); i++) {
+ for (team_pnum = 0; team_pnum < team_pcount[i]; team_pnum++, k++) {
+
+ j = team_p[i][team_pnum];
+ /* (nplanets+13)/2 is the height of window; from newwin.c */
+ if (k == 0 || k >= ((nplanets + 13) / 2)) {
+ if (k != 0)
+ continue;
+ //wind = planetw2;
+ sprintf(buf, "Planet name sctr own armies RESOURCES SURFC ATMOS VISIT TIME");
+ W_WriteText(wind, 2, 1, textColor, buf, strlen(buf),
+ W_RegularFont);
+ k = 2;
+ }
+ print_planet(wind, k, j);
+ } /* end of 2nd for */
+ if (team_pcount[i] > 0)
+ k++;
+ } /* end of 1st for */
+
+ for (i = 0; i < (number_of_teams + 2); i++)
+ free(team_p[i]);
+ free(team_p);
+ } else { /* do the original alpa only sort planet list */
+
+ for (i = 0, j = &planets[i]; i < nplanets; i++, j++, k++) {
+ if (i == 0 || i == nplanets / 2) {
+
+ sprintf(buf, "Planet name sctr own armies RESOURCES SURFC ATMOS VISIT TIME");
+
+ if (i != 0) {
+ continue;
+ //wind = planetw2;
+ }
+ W_WriteText(wind, 2, 1, textColor, buf, strlen(buf),
+ W_RegularFont);
+ k = 2;
+ }
+ team_pcount[mask_to_idx(j->pl_owner) + 1]++;
+ print_planet(wind, k, j);
+ }
+ }
+
+ k++;
+ for (i = 0; i < (number_of_teams + 1); i++) {
+ W_Color cur_color;
+
+ cur_color = shipCol[i];
+ //sprintf(buf, "%s: ", teaminfo[i-1].shortname);
+ sprintf(buf, "%s : ", teamname[i]);
+ W_WriteText(wind, i * 7 + 2, k, cur_color, buf, strlen(buf),
+ W_RegularFont);
+ sprintf(buf, " %-2d", team_pcount[i]);
+ W_WriteText(wind, i * 7 + 2, k + 1, cur_color, buf, strlen(buf),
+ W_RegularFont);
+ }
+
+ free(team_pcount);
+
+} /* end of planet_list_paradise */
+
+/****************************** print_planet() ************************/
+static void print_planet (W_Window wind, int line, struct planet *j)
+{
+ char buf[100]; /* to sprintf into */
+
+ sprintf(buf, "%-16s %d-%d", j->pl_name, (j->pl_x / GRIDSIZE) + 1,
+ (j->pl_y / GRIDSIZE) + 1);
+ W_WriteText(wind, 2, line, textColor, buf, strlen(buf),
+ W_RegularFont);
+
+ if (j->pl_info & me->p_team) {
+ if (PL_TYPE(*j) == PLSTAR) { /* if planet actually a star */
+ W_WriteText(wind, 24, line, textColor, "---S T A R---", 13,
+ W_RegularFont);
+ } else if (PL_TYPE(*j) == PLWHOLE) { /* if wormhole... */
+ W_WriteText(wind, 24, line, textColor, "---W O R M H O L E---", 21,
+ W_RegularFont);
+ } else { /* else planet not a star */
+ char *s = NULL;
+
+ switch (j->pl_flags & PLATMASK) {
+ case PLPOISON:
+ s = "TOXC";
+ break;
+ case PLATYPE3:
+ s = "TNTD";
+ break;
+ case PLATYPE2:
+ s = "THIN";
+ break;
+ case PLATYPE1:
+ s = "STND";
+ break;
+ };
+ sprintf(buf, "%3s %3d %c%c%c%c %c%c%c %4s",
+ teamname[j->pl_owner],
+ //teaminfo[mask_to_idx(j->pl_owner)].shortname,
+ j->pl_armies,
+ (j->pl_flags & PLREPAIR ? 'R' : ' '),
+ (j->pl_flags & PLFUEL ? 'F' : ' '),
+ (j->pl_flags & PLAGRI ? 'A' : ' '),
+ (j->pl_flags & PLSHIPYARD ? 'S' : ' '),
+ (j->pl_flags & PLDILYTH ? 'D' : ' '),
+ (j->pl_flags & PLMETAL ? 'M' : ' '),
+ (j->pl_flags & PLARABLE ? 'A' : ' '),
+ s);
+
+ W_WriteText(wind, 24, line, planetColor(j), buf, strlen(buf),
+ planetFont(j));
+
+ sprintf(buf, "%c%c%c%c %3ld", /* Remove team_bit_string reference */
+ (j->pl_info & FED ? 'F' : ' '),
+ (j->pl_info & ROM ? 'R' : ' '),
+ (j->pl_info & KLI ? 'K' : ' '),
+ (j->pl_info & ORI ? 'O' : ' '),
+ (me->p_team == j->pl_owner ? 0 : (status2->clock - j->pl_timestamp)));
+
+ W_WriteText(wind, 64, line, planetColor(j), buf, strlen(buf),
+ planetFont(j));
+ }
+ } else {
+ sprintf(buf, "--- No info; Scout me ---");
+ W_WriteText(wind, 24, line, textColor, buf, strlen(buf),
+ W_RegularFont);
+ }
+} /* end of print_planet */
+#endif
+
/* Update only lines that have changed */
void
updatePlanetw (void)
Index: death.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/death.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- death.c 28 Apr 2007 12:09:51 -0000 1.19
+++ death.c 17 May 2007 08:49:48 -0000 1.20
@@ -122,6 +122,14 @@
shipnos[me->p_whodead]);
break;
case KPLANET:
+#ifdef PARADISE
+ /* different message if killed by a star [BDyess] */
+ if(planets[me->p_whodead].pl_flags && PLSTAR)
+ sprintf (deathmessage,
+ "You were burned to a crisp by %s [star]",
+ planets[me->p_whodead].pl_name);
+ else
+#endif
sprintf (deathmessage,
"You were killed by planetary fire from %s (%c).",
planets[me->p_whodead].pl_name,
@@ -217,12 +225,30 @@
case KBADBIN:
strcpy (deathmessage, "Your netrek executable didn't verify correctly.");
break;
+#ifdef PARADISE
+ /* Unfortunately the numbering of whydead messages is inconsistent between
+ paradise and Vanilla */
+ case KMISSILE:
+ sprintf (deathmessage, "You were killed by a missile from %s (%c%c).",
+ players[me->p_whodead].p_name,
+ teamlet[players[me->p_whodead].p_team],
+ shipnos[me->p_whodead]);
+ break;
+#else
case KTORP2:
strcpy (deathmessage, "You were killed by detonated torpedo.");
break;
+#endif
+#ifdef PARADISE
+ case KASTEROID:
+ /* asteroid death [BDyess] */
+ sprintf(deathmessage, "You were smashed to bits by an asteroid.");
+ break;
+#else
case KSHIP2:
strcpy (deathmessage, "You were killed by chain reaction explosion.");
break;
+#endif
case KPLASMA2:
strcpy (deathmessage, "You were killed by zapped plasma.");
break;
Index: playerlist.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/playerlist.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- playerlist.c 16 Mar 2007 01:44:24 -0000 1.12
+++ playerlist.c 17 May 2007 08:49:49 -0000 1.13
@@ -106,8 +106,13 @@
static int plistPos[MAXPLAYER];
static int plistWidth = 0;
static int plist2Width = 0;
+#ifdef PARADISE
+static char *my_classes[NUM_TYPES] = {
+ "SC", "DD", "CA", "BB", "AS", "SB", "GA", "JS", "FL", "WB", "CL", "CV", "UT", "PT", "PU" };
+#else
static char *my_classes[NUM_TYPES] =
{ "SC", "DD", "CA", "BB", "AS", "SB", "GA", "AT" };
+#endif
/* Local Functions */
Index: socket.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/socket.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -d -r1.32 -r1.33
--- socket.c 16 May 2007 00:05:16 -0000 1.32
+++ socket.c 17 May 2007 08:49:49 -0000 1.33
@@ -945,7 +945,7 @@
#ifdef PARADISE
case SP_GPARAM:
switch ((unsigned char) bufptr[1]) {
-/* case 0:
+ case 0:
size = sizeof(struct gp_sizes_spacket);
break;
case 1:
@@ -968,11 +968,12 @@
break;
case 7:
size = sizeof(struct gp_teamplanet_spacket);
- break;*/
+ break;
default:
size = 0;
break;
}
+ break;
case SP_PARADISE_EXT1:
switch ((unsigned char) bufptr[1]) {
case SP_PE1_MISSING_BITMAP:
@@ -985,6 +986,7 @@
size = 0;
break;
}
+ break;
#endif
case SP_S_MESSAGE:
size = ((unsigned char) bufptr[4]); /* IMPORTANT Changed */
@@ -1912,6 +1914,10 @@
handleLogin (struct login_spacket *packet)
{
loginAccept = packet->accept;
+#ifdef PARADISE
+ if ((packet->pad2 == 69) && (packet->pad3 == 42))
+ paradise = 1;
+#endif
if (packet->accept)
{
/* no longer needed .. we have it in xtrekrc bcopy(packet->keymap,
@@ -2526,7 +2532,7 @@
pl->pl_y = ntohl (packet->y);
strcpy (pl->pl_name, packet->name);
pl->pl_namelen = strlen (packet->name);
- pl->pl_flags |= (PLREDRAW | PLCLEAR);
+ pl->pl_flags |= PLREDRAW;
reinitPlanets = 1;
#ifdef ROTATERACE
@@ -2719,7 +2725,7 @@
height = ntohs(packet->height);
page = ntohs(packet->page);
- //newMotdPic(x, y, width, height, (char *) packet->bits, page);
+ newMotdPic(x, y, width, height, (char *) packet->bits, page);
}
void handleStats2 (struct stats_spacket2 *packet)
@@ -2805,7 +2811,7 @@
return;
}
#endif
-/*
+
if(first_planet_packet)
{
first_planet_packet = 0;
@@ -2832,7 +2838,7 @@
if (infomapped && infotype == PLANETTYPE &&
((struct planet *) infothing)->pl_no == packet->pnum)
infoupdate = 1;
-*/
+
}
void handleTerrainInfo2 (struct terrain_info_packet2 *pkt)
@@ -3092,38 +3098,294 @@
}
}
+void handleGPsizes (struct gp_sizes_spacket *pkt)
+{
+/*
+ free_ranks();
+ free_royal();
+
+ free_teams();
+ free_torps();
+ free_phasers();
+ free_plasmas();
+ free_thingies();
+
+ nplayers = pkt->nplayers;
+ number_of_teams = pkt->nteams;
+ // shiptypes
+ nranks2 = pkt->nranks;
+ nroyals = pkt->nroyal;
+ nphasers = pkt->nphasers;
+ ntorps = pkt->ntorps;
+ nplasmas = pkt->nplasmas;
+ npthingies = pkt->nthingies;
+ ngthingies = pkt->gthingies;
+
+ // gwidth
+ // flags
+
+ load_generic_teams();
+
+ reinit_ranks();
+ reinit_royal();
+
+ resize_players();
+ initialize_torps();
+ initialize_phasers();
+ initialize_plasmas();
+ initialize_thingies();
+*/
+}
+
+void handleGPteam (struct gp_team_spacket *pkt)
+{
+/*
+ struct teaminfo_s *currteam;
+
+ if ((int) pkt->index >= number_of_teams) {
+ fprintf(stderr, "Team #%d %s is out of range (0..%d)\n", pkt->index,
+ pkt->teamname, number_of_teams);
+ return;
+ }
+ currteam = &teaminfo[pkt->index];
+
+ currteam->letter = pkt->letter;
+
+ strncpy(currteam->shortname, pkt->shortname, 3);
+ currteam->shortname[3] = 0;
+
+ strncpy(currteam->name, pkt->teamname, sizeof(currteam->name) - 1);
+ currteam->name[sizeof(currteam->name) - 1] = 0;
+*/
+}
+
+void handleGPteamlogo (struct gp_teamlogo_spacket *pkt)
+{
+/*
+ static char buf[13 * 99]; // 99x99
+ static int curr_height = 0;
+ static int lwidth, lheight;
+ static int teamindex;
+ int pwidth;
+
+ if ((unsigned) pkt->teamindex >= number_of_teams) {
+ fprintf(stderr, "Team #%d is out of range (0..%d)\n", pkt->teamindex,
+ number_of_teams);
+ return;
+ }
+ if (pkt->y != curr_height) {
+ fprintf(stderr, "Bad gp_teamlogo packet sequence y(%d) != curr_height(%d)\n",
+ pkt->y, curr_height);
+ curr_height = 0;
+ return;
+ }
+ if (curr_height) {
+ if (lwidth != pkt->logowidth || lheight != pkt->logoheight ||
+ teamindex != pkt->teamindex) {
+ fprintf(stderr, "gp_teamlogo packet sequence error, %d!=%d || %d!=%d || %d!=%d\n",
+ lwidth, pkt->logowidth, lheight, pkt->logoheight,
+ teamindex, pkt->teamindex);
+ curr_height = 0;
+ return;
+ }
+ } else {
+ teamindex = pkt->teamindex;
+ lwidth = pkt->logowidth;
+ lheight = pkt->logoheight;
+ if (lwidth > 99 || lheight > 99) {
+ fprintf(stderr, "logo too big (%dx%d), rejecting\n", lwidth, lheight);
+ curr_height = 0;
+ return;
+ }
+ }
+ pwidth = (lwidth - 1) / 8 + 1;
+ memcpy(buf + pwidth * curr_height, pkt->data,
+ (unsigned int)(pwidth * pkt->thisheight));
+ curr_height += pkt->thisheight;
+
+ if (curr_height >= lheight) {
+ W_FreeImage(teaminfo[teamindex].shield_logo);
+ teaminfo[teamindex].shield_logo =
+ W_BitmapToImage(lwidth, lheight, buf);
+ curr_height = 0;
+ }
+*/
+}
+
+void handleGPshipshape (struct gp_shipshape_spacket *pkt)
+{
+/*
+ if (pkt->race < -1 || pkt->race >= number_of_teams) {
+ fprintf(stderr, "race #%d out of range (-1..%d)\n", pkt->race,
+ number_of_teams - 1);
+ return;
+ }
+ if ( (int) pkt->shipno >= nshiptypes) {
+ fprintf(stderr, "ship class #%d out of range (0..%d)\n", pkt->shipno,
+ nshiptypes - 1);
+ return;
+ }
+#ifdef FIXME
+ replace_shipshape(pkt->race, pkt->shipno, pkt->nviews,
+ pkt->width, pkt->height);
+#endif
+*/
+}
+
+void handleGPshipbitmap (struct gp_shipbitmap_spacket *pkt)
+{
+/*
+ if (pkt->race < -1 || pkt->race >= number_of_teams) {
+ fprintf(stderr, "race #%d out of range (-1..%d)\n", pkt->race,
+ number_of_teams - 1);
+ return;
+ }
+ if ( (int) pkt->shipno >= nshiptypes) {
+ fprintf(stderr, "ship class #%d out of range (0..%d)\n", pkt->shipno,
+ nshiptypes - 1);
+ return;
+ }
+#ifdef FIXME
+ replace_ship_bitmap(pkt->race, pkt->shipno, pkt->thisview, pkt->bitmapdata);
+#endif
+*/
+}
+
+void handleGPrank (struct gp_rank_spacket *pkt)
+{
+/*
+ struct rank2 *curr;
+ if (pkt->rankn >= nranks2) {
+ fprintf(stderr, "rank #%d %s out of range (0..%d)\n", pkt->rankn,
+ pkt->name, nranks2 - 1);
+ return;
+ }
+ curr = &ranks2[pkt->rankn];
+ free(curr->name);
+
+ curr->genocides = htonl(pkt->genocides);
+ curr->di = htonl(pkt->milliDI) / 1000.0;
+ curr->battle = htonl(pkt->millibattle) / 1000.0;
+ curr->strategy = htonl(pkt->millistrat) / 1000.0;
+ curr->specship = htonl(pkt->millispec) / 1000.0;
+ curr->name = strdup(pkt->name);
+*/
+}
+
+void handleGProyal (struct gp_royal_spacket *pkt)
+{
+/*
+ if ((int) pkt->rankn >= nroyals) {
+ fprintf(stderr, "Royalty #%d %s out of range (0..%d)\n", pkt->rankn,
+ pkt->name, nroyals - 1);
+ return;
+ }
+ free(royal[pkt->rankn].name);
+ royal[pkt->rankn].name = strdup(pkt->name);
+*/
+}
+
+#ifdef FIXME
+static unsigned char mplanet_bits[] = {
+ 0xe0, 0x03, 0x18, 0x0c, 0x04, 0x10, 0x02, 0x20, 0x02, 0x20, 0x01, 0x40,
+ 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x02, 0x20, 0x02, 0x20,
+0x04, 0x10, 0x18, 0x0c, 0xe0, 0x03, 0x00, 0x00};
+static unsigned char planet_bits[] = {
+ 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x00, 0x60, 0x00,
+ 0x20, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02,
+ 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x08,
+ 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x10,
+ 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10,
+ 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10,
+ 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08,
+ 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02,
+ 0x10, 0x00, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00,
+0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00};
+#endif
+
+void handleGPteamplanet (struct gp_teamplanet_spacket *pkt)
+{
+/*
+#ifdef FIXME
+ {
+#define TACTICALSIZE sizeof(pkt->tactical)
+ unsigned char tactical[TACTICALSIZE];
+ int i;
+ int race = pkt->teamn;
+
+ if (race < -1 || race >= number_of_teams) {
+ fprintf(stderr, "race #%d out of range (-1..%d)\n", race,
+ number_of_teams - 1);
+ return;
+ }
+ for (i = 0; i < TACTICALSIZE; i++) {
+ tactical[i] = (pkt->tactical[i] & pkt->tacticalM[i]) |
+ (planet_bits[i] & ~pkt->tacticalM[i]);
+ }
+
+ W_FreeImage(bplanets[race + 1]);
+ bplanets[race + 1] = W_BitmapToImage(30, 30, tactical);
+
+#undef TACTICALSIZE
+ }
+
+ {
+#define GALACTICSIZE sizeof(pkt->galactic)
+ unsigned char galactic[GALACTICSIZE];
+ int i;
+ int race = pkt->teamn;
+
+ if (race < -1 || race >= number_of_teams) {
+ fprintf(stderr, "race #%d out of range (-1..%d)\n", race,
+ number_of_teams - 1);
+ return;
+ }
+ for (i = 0; i < GALACTICSIZE; i++) {
+ galactic[i] = (pkt->galactic[i] & pkt->galacticM[i]) |
+ (mplanet_bits[i] & ~pkt->galacticM[i]);
+ }
+
+ W_FreeImage(mbplanets[race + 1]);
+ mbplanets[race + 1] = W_BitmapToImage(16, 16, galactic);
+
+#undef GALACTICSIZE
+ }
+#endif
+*/
+}
+
void handleGameparams (struct gameparam_spacket *packet)
{
- /*switch (pkt->subtype) {
+ switch (packet->subtype) {
case 0:
- handleGPsizes((struct gp_sizes_spacket *) pkt);
+ handleGPsizes ((struct gp_sizes_spacket *) packet);
break;
case 1:
- handleGPteam((struct gp_team_spacket *) pkt);
+ handleGPteam ((struct gp_team_spacket *) packet);
break;
case 2:
- handleGPteamlogo((struct gp_teamlogo_spacket *) pkt);
+ handleGPteamlogo ((struct gp_teamlogo_spacket *) packet);
break;
case 3:
- handleGPshipshape((struct gp_shipshape_spacket *) pkt);
+ handleGPshipshape ((struct gp_shipshape_spacket *) packet);
break;
case 4:
- handleGPshipbitmap((struct gp_shipbitmap_spacket *) pkt);
+ handleGPshipbitmap ((struct gp_shipbitmap_spacket *) packet);
break;
case 5:
- handleGPrank((struct gp_rank_spacket *) pkt);
+ handleGPrank ((struct gp_rank_spacket *) packet);
break;
case 6:
- handleGProyal((struct gp_royal_spacket *) pkt);
+ handleGProyal ((struct gp_royal_spacket *) packet);
break;
case 7:
- handleGPteamplanet((struct gp_teamplanet_spacket *) pkt);
+ handleGPteamplanet ((struct gp_teamplanet_spacket *) packet);
break;
default:
- fprintf(stderr, "Gameparams packet subtype %d not yet implemented\n",
- pkt->subtype);
- }*/
+ LineToConsole("Gameparams packet subtype %d not yet implemented\n", packet->subtype);
+ }
}
+
#endif /* PARADISE*/
/* UDP stuff */
Index: data.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/data.c,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -d -r1.92 -r1.93
--- data.c 16 May 2007 00:05:15 -0000 1.92
+++ data.c 17 May 2007 08:49:48 -0000 1.93
@@ -273,6 +273,29 @@
extern double Sin[], Cos[];
+#ifdef PARADISE
+int paradise = 0; /* is the server a paradise server */
+int noParadiseBitmaps = 0;
+int gwidth = GWIDTH; /* galaxy width, adjusted for zoom [BDyess] */
+int offsetx = 0;
+int offsety = 0; /* offsets when zooming [BDyess] */
+int nplayers = 36;
+int nshiptypes = 15;
+int ntorps = 8;
+int npthingies = 20;
+int ngthingies = 0;
+int nplasmas = 1;
+int nphasers = 1;
+int nplanets = MAXPLANETS; /* get this info dyn. from Pserver */
+struct teaminfo_s *teaminfo = NULL;
+int number_of_teams = 4;
+/* MOTD data */
+struct page *currpage = NULL;
+struct page *pmotddata = NULL;
+char blk_refitstring[80] = "s=scout, d=destroyer, c=cruiser, b=battleship, a=assault, o=starbase";
+int blk_friendlycloak = 0; /* Show color of cloakers who are friendly. */
+#endif
+
W_Icon fedteam, romteam, kliteam, oriteam;
W_Icon stipple, clockpic, clockhandpic, genopic, genopic2, icon;
@@ -317,6 +340,14 @@
W_Icon hull[BMP_HULL_FRAMES];
int vary_hull = 0;
+// Paradise bitmaps
+#ifdef PARADISE
+W_Icon base_star_bitmap;
+W_Icon star_bitmap[STAR_VIEWS];
+W_Icon star_mbitmap;
+W_Icon paradise_ship_bitmaps;
+W_Icon paradise_ships[NUM_PSHIP_TYPES][NUMTEAMS];
+#endif
// Ships
W_Icon ship_bitmaps[5];
W_Icon fed_bitmaps[NUM_TYPES][SHIP_VIEWS], kli_bitmaps[NUM_TYPES][SHIP_VIEWS],
Index: feature.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/feature.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- feature.c 14 May 2007 02:56:40 -0000 1.18
+++ feature.c 17 May 2007 08:49:48 -0000 1.19
@@ -99,7 +99,11 @@
{"SHOW_CLOAKERS", &F_show_cloakers, 'S', 1, 0, 0},
{"TURN_KEYS", &F_turn_keys, 'S', 1, 0, 0},
{"SHOW_VISIBILITY_RANGE", &F_show_visibility_range, 'S', 1, 0, 0},
+#ifdef PARADISE
+ {"SP_FLAGS_ALL", &F_sp_flags_all, 'S', 0, 0, 0},
+#else
{"SP_FLAGS_ALL", &F_sp_flags_all, 'S', 1, 0, 0},
+#endif
{0, 0, 0, 0, 0, 0}
};
@@ -285,6 +289,7 @@
}
/* Ignore these feature packets for testing purposes */
#if DEBUG
+ motion_mouse_steering = 1;
F_show_army_count = 1;
F_show_other_speed = 1;
F_show_cloakers = 1;
Index: beeplite.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/beeplite.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- beeplite.c 28 Feb 2007 12:21:49 -0000 1.15
+++ beeplite.c 17 May 2007 08:49:48 -0000 1.16
@@ -62,8 +62,6 @@
emph_planet_seq_n[l->pl_no] = beep_lite_cycle_time_planet;
l->pl_flags |= PLREDRAW; /* Leave redraw on until * *
* done highlighting */
- l->pl_flags |= PLCLEAR; /* Leave redraw on until * *
- * done highlighting */
}
void liteplayer(struct player *j)
Index: inform.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/inform.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- inform.c 14 Mar 2007 18:36:07 -0000 1.4
+++ inform.c 17 May 2007 08:49:48 -0000 1.5
@@ -32,9 +32,15 @@
* There is a different sized window for each type player/planet * and we take
* care to keep it from extending beyond the main * window boundaries. */
+#ifdef PARADISE
+static char *my_classes[NUM_TYPES] = {
+ "SC", "DD", "CA", "BB", "AS", "SB", "GA", "JS", "FL", "WB", "CL", "CV", "UT", "PT", "PU"
+};
+#else
static char *my_classes[NUM_TYPES] = {
"SC", "DD", "CA", "BB", "AS", "SB", "GA", "AT"
};
+#endif
/******************************************************************************/
/*** inform() ***/
Index: map.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/map.c,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -d -r1.55 -r1.56
--- map.c 14 May 2007 02:56:41 -0000 1.55
+++ map.c 17 May 2007 08:49:49 -0000 1.56
@@ -38,6 +38,13 @@
#define DETAIL 100
#define SIZE (GWIDTH/DETAIL)
+#ifdef PARADISE
+int drawgrid = 1; /* goes to netrekrc eventually */
+int blk_zoom = 0; /* goes to netrekrc eventually */
+int sectorNums = 1; /* goes to netrekrc eventually */
+#define DRAWGRID 4
+#endif
+
/*
* Local Variables:
@@ -577,12 +584,24 @@
dy - (BMP_MPLANET_HEIGHT / 2 + 4),
BMP_MPLANET_WIDTH + 8,
BMP_MPLANET_HEIGHT + 8);
- l->pl_flags &= ~PLCLEAR;
}
/* Draw the new planet */
-
+#ifdef PARADISE
+ if (PL_TYPE(*l) == PLSTAR)
+ W_WriteScaleBitmap (dx - (BMP_MSTAR_WIDTH / 2) * SCALE / scaleFactor,
+ dy - (BMP_MSTAR_HEIGHT / 2) * SCALE / scaleFactor,
+ BMP_MSTAR_WIDTH * SCALE / scaleFactor,
+ BMP_MSTAR_HEIGHT * SCALE / scaleFactor,
+ BMP_MSTAR_WIDTH,
+ BMP_MSTAR_HEIGHT,
+ 0,
+ star_mbitmap,
+ planetColor (l),
+ mapw);
+ else
+#endif
#ifdef BEEPLITE
if (useLite && emph_planet_seq_n[l->pl_no] > 0)
{
@@ -626,8 +645,6 @@
emph_planet_seq_n[l->pl_no] -= 1;
l->pl_flags |= PLREDRAW; /* Leave redraw on until * *
* done highlighting */
- l->pl_flags |= PLCLEAR; /* Leave redraw on until * *
- * done highlighting */
}
else
{
@@ -691,7 +708,13 @@
l->pl_name, 3, planetFont (l));
}
- if (F_show_army_count && (showArmy == 2 || showArmy == 3) && (l->pl_info & me->p_team))
+ if (F_show_army_count
+ && (showArmy == 2 || showArmy == 3)
+ && (l->pl_info & me->p_team)
+#ifdef PARADISE
+ && (PL_TYPE(*l) != PLSTAR)
+#endif
+ )
{
char armbuf[4];
int armbuflen;
@@ -855,6 +878,11 @@
int viewdist;
int view = TWINSIDE * scaleFactor / 2;
int mvx, mvy;
+#ifdef PARADISE
+ static int osx = 0, osy = 0; /* old square */
+ static int scalex, scaley;
+ static int grid_fuse;
+#endif
if (doubleBuffering)
W_Win2Mem (mapSDB);
@@ -868,6 +896,10 @@
dx = (me->p_x) / (GWIDTH / GWINSIDE);
dy = (me->p_y) / (GWIDTH / GWINSIDE);
+#ifdef PARADISE
+ grid_fuse++; /* we only draw the grids every DRAWGRID interval */
+#endif
+
if (redrawall)
{
/*
@@ -897,8 +929,6 @@
for (l = planets + MAXPLANETS - 1; l >= planets; --l)
l->pl_flags |= PLREDRAW;
-
- redrawall = 0;
}
else
{
@@ -971,6 +1001,109 @@
}
}
+#ifdef PARADISE
+ /* draw grid on galactic */
+ if ((redrawall || (grid_fuse % DRAWGRID) == 0) && (drawgrid)) {
+ int x, y, width, h, grid;
+ char numbuf[1];
+ int blk_gwidth = GWIDTH; /* hack */
+ grid = GRIDSIZE * GWINSIDE / GWIDTH;
+ for (i = 1; i <= 6 / (blk_zoom ? 2 : 1); i++) {
+ /* looks nasty but we only have to do it 3 times if blk_zoom */
+
+ /* horizontal line */
+ x = 0;
+ y = i * grid;
+ width = GWINSIDE;
+ numbuf[0] = '0' + (char) i;
+ if (blk_zoom) {
+ /* we might have to clip */
+ dy = i * GRIDSIZE + offsety;
+ if (dy >= 0 && dy <= blk_gwidth + 2 * GRIDSIZE) {
+ if (offsetx < 0) {
+ x = grid;
+ width = 2 * x;
+ } else if (offsetx + 3 * GRIDSIZE > blk_gwidth) {
+ width = 2 * grid;
+ }
+ W_MakeDashedLine(mapw, x, y, x + width, y, W_Grey);
+ }
+ if (sectorNums) {
+ numbuf[0] = '0' + (char) (i + offsety / GRIDSIZE);
+ if ((numbuf[0] == '0') || (numbuf[0] == '7'))
+ numbuf[0] = ' ';
+ if (i == 1) /* so numbers dont overwrite in 1st box */
+ W_WriteText(mapw, x + 2, y - grid + 11, W_Grey, numbuf, 1,
+ W_RegularFont);
+ else
+ W_WriteText(mapw, x + 2, y - grid + 2, W_Grey, numbuf, 1,
+ W_RegularFont);
+ }
+ } else {
+ W_MakeDashedLine(mapw, x, y, x + width, y, W_Grey);
+ if (sectorNums) {
+ W_WriteText(mapw, x + 2, y - grid + 2, W_Grey, numbuf, 1, W_RegularFont);
+ }
+ }
+ /* vertical line */
+ x = i * grid;
+ y = 0;
+ h = GWINSIDE;
+
+ if (blk_zoom) {
+ /* we might have to clip */
+ dx = i * GRIDSIZE + offsetx;
+ if (dx >= 0 && dx <= blk_gwidth + 2 * GRIDSIZE) {
+ if (offsety < 0) {
+ y = grid;
+ h = 2 * y;
+ } else if (offsety + 3 * GRIDSIZE > blk_gwidth) {
+ h = 2 * grid;
+ }
+ W_MakeDashedLine(mapw, x, y, x, y + h, W_Grey);
+ }
+ if (sectorNums) {
+ numbuf[0] = '0' + (char) (i + offsetx / GRIDSIZE);
+ if ((numbuf[0] == '0') || (numbuf[0] == '7'))
+ numbuf[0] = ' ';
+ if (i == 1)
+ W_WriteText(mapw, x - grid + 11, y + 2, W_Grey, numbuf, 1,
+ W_RegularFont);
+ else
+ W_WriteText(mapw, x - grid + 2, y + 2, W_Grey, numbuf, 1,
+ W_RegularFont);
+ }
+ } else {
+ W_MakeDashedLine(mapw, x, y, x, y + h, W_Grey);
+ if (sectorNums) {
+ W_WriteText(mapw, x - grid + 2, y + 2, W_Grey, numbuf, 1,
+ W_RegularFont);
+ }
+ }
+ }
+
+ scalex = ((me->p_x - offsetx) / GRIDSIZE) * GRIDSIZE;
+ scaley = ((me->p_y - offsety) / GRIDSIZE) * GRIDSIZE;
+ if (!redrawall && ((osx != scalex) || (osy != scaley))) {
+
+ /* clear old sector */
+ x = osx * GWINSIDE / GWIDTH;
+ y = osy * GWINSIDE / GWIDTH;
+ width = h = grid;
+
+ W_WriteRectangle (mapw, x + 2, y + 2, width - 4, h - 4, 0, backColor);
+
+ osx = scalex;
+ osy = scaley;
+ }
+ /* draw our current sector */
+ x = scalex * GWINSIDE / GWIDTH;
+ width = h = grid;
+ y = scaley * GWINSIDE / GWIDTH;
+
+ W_WriteRectangle (mapw, x + 2, y + 2, width - 4, h - 4, 1, yColor);
+ }
+#endif
/* Draw Planets */
@@ -1211,10 +1344,19 @@
}
else
{
+#ifdef PARADISE
+ /* Paradise servers changed the ship cap protocol for
+ phaser damage :( */
+ tx = (int) (j->p_x + j->p_ship.s_phaserdamage
+ * Cos[ph->ph_dir]) * GWINSIDE / GWIDTH;
+ ty = (int) (j->p_y + j->p_ship.s_phaserdamage
+ * Sin[ph->ph_dir]) * GWINSIDE / GWIDTH;
+#else
tx = (int) (j->p_x + PHASEDIST * j->p_ship.s_phaserdamage / 100
* Cos[ph->ph_dir]) * GWINSIDE / GWIDTH;
ty = (int) (j->p_y + PHASEDIST * j->p_ship.s_phaserdamage / 100
* Sin[ph->ph_dir]) * GWINSIDE / GWIDTH;
+#endif
}
break;
case PHHIT2:
@@ -1445,6 +1587,8 @@
}
}
+ redrawall = 0;
+
if (doubleBuffering)
W_Mem2Win (mapSDB);
}
Index: defaults.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/defaults.c,v
retrieving revision 1.85
retrieving revision 1.86
diff -u -d -r1.85 -r1.86
--- defaults.c 14 May 2007 02:56:40 -0000 1.85
+++ defaults.c 17 May 2007 08:49:48 -0000 1.86
@@ -23,6 +23,26 @@
#define DEFAULTSHIP NUM_TYPES
+#ifdef PARADISE
+struct shipdef shipdefaults[NUM_TYPES + 1] = {
+ {"sc", NULL, NULL, NULL, NULL},
+ {"dd", NULL, NULL, NULL, NULL},
+ {"ca", NULL, NULL, NULL, NULL},
+ {"bb", NULL, NULL, NULL, NULL},
+ {"as", NULL, NULL, NULL, NULL},
+ {"sb", NULL, NULL, NULL, NULL},
+ {"ga", NULL, NULL, NULL, NULL},
+ {"js", NULL, NULL, NULL, NULL},
+ {"fl", NULL, NULL, NULL, NULL},
+ {"wb", NULL, NULL, NULL, NULL},
+ {"cl", NULL, NULL, NULL, NULL},
+ {"cv", NULL, NULL, NULL, NULL},
+ {"ut", NULL, NULL, NULL, NULL},
+ {"pt", NULL, NULL, NULL, NULL},
+ {"pu", NULL, NULL, NULL, NULL},
+ {"default", NULL, NULL, NULL, NULL}
+};
+#else
struct shipdef shipdefaults[NUM_TYPES + 1] = {
{"sc", NULL, NULL, NULL, NULL},
{"dd", NULL, NULL, NULL, NULL},
@@ -34,6 +54,7 @@
{"att", NULL, NULL, NULL, NULL},
{"default", NULL, NULL, NULL, NULL}
};
+#endif
int myshiptype = DEFAULTSHIP;
struct shipdef *myshipdef = &shipdefaults[DEFAULTSHIP];