[comp.windows.x] Xtank1.2 color patches

gcmcnutt@mlsgcm.Ebay.Sun.COM (Greg McNutt) (07/17/90)

I'm resending this again.  Sorry if you got it twice.

--------------------------------------
This is a simple patch to get color working on xtank v1.2.  This has
only been tested on Sun systems (running openwindows and x11r4).  Give
it a try.  It may work for you too!

We do still have one persistent bug.  It has to do with owner changes
on frisbees when running ultimate.  Probably a different approach to
object coloring will be necessary to get this working right...

To apply patch:

1) ensure you are using 1.2 of xtank

2) go into the 'Src' directory of xtank

3) patch < thisfile

4) rebuild xtank (don't forget to edit config.h)

good luck

greg
(gcmcnutt@ebay.sun.com)

---------- patch for xtank color support ------------
*** actions.c.old	Fri Jul 13 09:12:33 1990
--- actions.c	Tue Mar  6 14:10:21 1990
***************
*** 334,339 ****
--- 334,344 ----
    /* Take it away from previous owner */
    if(b->owner != (Vehicle *) NULL) b->owner->num_discs--;
  
+   if (!b->owner_changed) {
+       b->owner_changed = TRUE;
+       b->prev_color = (b->owner != NULL)?b->owner->color:WHITE;
+   }
+ 
    /* Give it to new owner */
    b->owner = v;
    if(b->owner != (Vehicle *) NULL) b->owner->num_discs++;
*** display.c.old	Fri Jul 13 09:11:16 1990
--- display.c	Tue Mar  6 13:55:36 1990
***************
*** 184,194 ****
--- 184,201 ----
    Bullet *b;
    Picture *pic;
    int i;
+   int old_color;
  
    for(i = 0 ; i < bset->number ; i++) {
      b = bset->list[i];
      pic = &bullet_obj->pic[b->type];
  
+     old_color = b->owner_changed?
+ 			b->prev_color:
+ 			(b->owner != NULL)?
+ 				b->owner->color:
+ 				WHITE;
+ 
      /* Erase the old picture of the bullet */
      if(status != ON) {
        if(b->life < weapon_stat[b->type].frames - 1 && b->life != -2)
***************
*** 195,206 ****
  	if(settings.point_bullets == TRUE && b->type != DISC)
  	  draw_point(ANIM_WIN,b->old_loc->screen_x[term->num],
  		     b->old_loc->screen_y[term->num],DRAW_XOR,
! 		     (b->owner != NULL)?b->owner->color:WHITE);
          else
  	  draw_picture(ANIM_WIN,b->old_loc->screen_x[term->num],
  		       b->old_loc->screen_y[term->num],
  		       pic,DRAW_XOR,
! 		       (b->owner != NULL)?b->owner->color:WHITE);
      }
  
      /* Draw the new picture of the bullet */
--- 202,213 ----
  	if(settings.point_bullets == TRUE && b->type != DISC)
  	  draw_point(ANIM_WIN,b->old_loc->screen_x[term->num],
  		     b->old_loc->screen_y[term->num],DRAW_XOR,
! 		     old_color);
          else
  	  draw_picture(ANIM_WIN,b->old_loc->screen_x[term->num],
  		       b->old_loc->screen_y[term->num],
  		       pic,DRAW_XOR,
! 		       old_color);
      }
  
      /* Draw the new picture of the bullet */
***************
*** 209,220 ****
  	if(settings.point_bullets == TRUE && b->type != DISC)
  	  draw_point(ANIM_WIN,b->loc->screen_x[term->num],
  		     b->loc->screen_y[term->num],DRAW_XOR,
! 		     (b->owner != NULL)?b->owner->color:WHITE);
          else
  	  draw_picture(ANIM_WIN,b->loc->screen_x[term->num],
  		       b->loc->screen_y[term->num],
  		       pic,DRAW_XOR,
! 		       (b->owner != NULL)?b->owner->color:WHITE);
      }
    }
  }
--- 216,227 ----
  	if(settings.point_bullets == TRUE && b->type != DISC)
  	  draw_point(ANIM_WIN,b->loc->screen_x[term->num],
  		     b->loc->screen_y[term->num],DRAW_XOR,
!     		     (b->owner != NULL)?b->owner->color:WHITE);
          else
  	  draw_picture(ANIM_WIN,b->loc->screen_x[term->num],
  		       b->loc->screen_y[term->num],
  		       pic,DRAW_XOR,
!     		       (b->owner != NULL)?b->owner->color:WHITE);
      }
    }
  }
*** structs.h.old	Fri Jul 13 09:11:44 1990
--- structs.h	Tue Mar  6 13:52:24 1990
***************
*** 278,283 ****
--- 278,285 ----
  
  typedef struct {
    Vehicle *owner;		/* pointer to vehicle that shot bullet */
+   Boolean owner_changed:1;	/* TRUE if owner has changed */
+   int prev_color;		/* used for disc ownership change */
    Loc *loc;			/* pointer to location info */
    Loc *old_loc;			/* pointer to previous location info */
    Loc loc1;			/* 1st area for location info */
*** update.c.old	Fri Jul 13 09:11:32 1990
--- update.c	Tue Mar  6 13:52:45 1990
***************
*** 288,293 ****
--- 288,295 ----
      old_loc = b->old_loc = b->loc;
      b->loc = loc;
      
+     b->owner_changed = FALSE;
+ 
      update_loc(old_loc,loc,b->xspeed,b->yspeed);
    }
  }
*** x11.c.old	Fri Jul 13 09:10:40 1990
--- x11.c	Fri Jul 13 09:18:43 1990
***************
*** 121,126 ****
--- 121,127 ----
  {
    Window rw;
    XSizeHints size;
+   XWMHints wm_hints;
    Pixmap icon;
  
    size.flags = USPosition | USSize;
***************
*** 140,145 ****
--- 141,149 ----
  
    size.width  = min(size.min_width,  size.max_width);
    size.height = min(size.min_height, size.max_height);
+ 
+   wm_hints.flags = InputHint;
+   wm_hints.input = True;
   	
    /* Let user know that it doesn't fit on screen, but don't quit */
    if((size.width < size.min_width)||(size.height < size.min_height))
***************
*** 156,161 ****
--- 160,166 ----
    icon = XCreateBitmapFromData(vid->dpy,rw,icon_bits,icon_width,icon_height);
    XSetStandardProperties(vid->dpy,vid->parent_id,program_name,program_name,
  			 icon,NULL,0,&size);
+   XSetWMHints(vid->dpy, vid->parent_id, &wm_hints);
  
    return 0;
  }
***************
*** 532,538 ****
    ** Turn off graphics exposures, to avoid getting an event for each
    ** XCopyArea with a pixmap.  X is totally brain damaged.
    */
-   values.background = vid->bg;
    values.graphics_exposures = False;
    for(i = 0 ; i < MAX_COLORS ; i++) {
      for(j = 0 ; j < MAX_DRAW_FUNCS ; j++) {
--- 537,542 ----
***************
*** 540,549 ****
--- 544,555 ----
  	  case DRAW_XOR:
  	    values.function = GXxor;
  	    values.foreground = vid->color[i] ^ vid->bg;
+ 	    values.background = 0;
  	    break;
  	  case DRAW_COPY:
  	    values.function = GXcopy;
  	    values.foreground = vid->color[i];
+ 	    values.background = vid->bg;
  	    break;
  	  }
  
*** Makefile.old	Fri Jul 13 09:22:37 1990
--- Makefile	Fri Jul 13 09:22:48 1990
***************
*** 98,104 ****
  print:
  	enscript -2rG Makefile $(INCL) $(SRCS)
  
! TAGS: $(INCL) $SRCS) $(XINCL) $(XSRCS) x11.c
  	etags -t $(INCL) $(XINCL) $(SRCS) $(XSRCS) x11.c
  
  # Include file dependency fixer-uppers
--- 98,104 ----
  print:
  	enscript -2rG Makefile $(INCL) $(SRCS)
  
! TAGS:	$(INCL) $(SRCS) $(XINCL) $(XSRCS) x11.c
  	etags -t $(INCL) $(XINCL) $(SRCS) $(XSRCS) x11.c
  
  # Include file dependency fixer-uppers
*** thread.c.old	Fri Jul 13 13:12:18 1990
--- thread.c	Fri Jul 13 11:59:00 1990
***************
*** 8,13 ****
--- 8,16 ----
  
  #include "thread.h"
  
+ /* The current thread that is executing */
+ Thread *curthd;
+ 
  #ifdef THREAD_MP
  
 
/****************************************************************************/
***************
*** 22,30 ****
  DO NOT REMOVE OR ALTER THIS NOTICE AND ITS PROVISIONS.
  ****************************************************************************/
  
- /* The current thread that is executing */
- Thread *curthd;
- 
  Thread *thread_setup()
  {
      static Thread mainthd[10];
--- 25,30 ----
***************
*** 123,133 ****
  }
  #endif
  
! #if THREAD_SUNLWP
  /* Sun thread implementation using LWP package by Bill Bolosky
  ** (bolosky@cs.rochester.edu) and Robert Potter(potter@cs.rochester.edu),
  ** November 1989. */
! **
  ** Remember to link with -llwp
  */
  
--- 123,133 ----
  }
  #endif
  
! #ifdef THREAD_SUNLWP
  /* Sun thread implementation using LWP package by Bill Bolosky
  ** (bolosky@cs.rochester.edu) and Robert Potter(potter@cs.rochester.edu),
  ** November 1989. */
! /*
  ** Remember to link with -llwp
  */
  
*** setup.c.old	Fri Jul 13 15:39:58 1990
--- setup.c	Wed Dec  6 15:37:42 1989
***************
*** 280,290 ****
--- 280,295 ----
  
    /* Assign number to vehicle before init, so init_messages() will work */
    v->number = c->number;
+ #ifndef BEFORE
+   v->team = c->team;
+ #endif
    init_vehicle(v);
  
    /* Assign the combatant specific information to the vehicle */
    v->flag = VEHICLE_0 << v->number;
+ #ifdef BEFORE
    v->team = c->team;
+ #endif
    sprintf(v->disp,"%c%d %s",team_char[c->team],c->number,c->name);
    v->owner = c;
    c->vehicle = v;
*** init.c.old	Fri Jul 13 15:39:47 1990
--- init.c	Wed Dec  6 15:38:02 1989
***************
*** 76,82 ****
--- 76,84 ----
    init_specials(v);
    init_turrets(v);
  
+ #ifdef BEFORE
    v->team = 0;
+ #endif
    v->num_programs = 0;
    v->num_discs = 0;
    v->color = team_color[v->team];
*** x11.h.old	Fri Jul 13 15:39:36 1990
--- x11.h	Mon Dec 11 15:37:14 1989
***************
*** 75,81 ****
  	 y > -pic->offset_y && tmp_y < vid->win[w].height) { \
  	if(vid->planes == 1) \
  	  XCopyArea(vid->dpy,vid->pixid[pic->pixmap],vid->win[w].id, \
! 	 	    vid->graph_gc[func][color],0,0,pic->width,pic->height, \
  		    tmp_x,tmp_y); \
          else \
  	  XCopyPlane(vid->dpy,vid->pixid[pic->pixmap],vid->win[w].id, \
--- 75,81 ----
  	 y > -pic->offset_y && tmp_y < vid->win[w].height) { \
  	if(vid->planes == 1) \
  	  XCopyArea(vid->dpy,vid->pixid[pic->pixmap],vid->win[w].id, \
! 	 	    vid->graph_gc[func][1],0,0,pic->width,pic->height, \
  		    tmp_x,tmp_y); \
          else \
  	  XCopyPlane(vid->dpy,vid->pixid[pic->pixmap],vid->win[w].id, \

thoth@lightning.cis.ufl.edu (Gilligan) (07/23/90)

  The release of Xtank 1.2b has been announced on the umd xtank list.
If you are willing to BETA TEST this version you can ftp it from
ftp.eng.umd.edu in ~ftp/xtank.
  REPEAT, THIS IS STILL A BETA VERSION.  no mortals need ftp.  You
have to have guts and lots of patience.
  Also, if you ftp it from these guys you have to tell them ("Stripes,
aka Josh" <stripes@eng.umd.edu>) what kind of success you had
compiling it on your various supported architectures or you suffer
major karmic damage.
  They also appreciate announcements that you have succesfully ported
Xtank to a new architecture, unless you're lying in which case we send
Guido after you.
  Happy tanking!

  THOTH out -=O=-
--
( My name's not really Gilligan, It's Robert Forsman, without an `e' )