File: hole.c

package info (click to toggle)
gravitywars 1.102-34
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, sid, stretch
  • size: 2,468 kB
  • ctags: 553
  • sloc: ansic: 3,938; makefile: 52; sh: 52
file content (85 lines) | stat: -rw-r--r-- 1,407 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/* GravityWars 1.1,  (C) Sami Niemi -95 */

#include "memory.h"

/*-----------------------------------------------------------------setbullet */
/* I think this one made holes just in the screen. Not in the virtual
 * BlockMap.. I.e. They dissappear when flown over.. */

void OLDmakehole(int x, int y, int type) {

  static long  adr;
  static short page,xx,yy,n;
  static uchar *adr2;
  static uchar *holemask;
  static uchar *gfx;
  static uchar col;

  x-=7;
  y-=7;

  xx=x&31;
  yy=y&31;
  gfx=&block[0][(yy<<5)+xx];


  holemask=hole[type];

  adr=(y<<9)+(y<<7)+x;
  page=adr >> 16;
  vga_setpage(page);

  for(yy=0; yy<=15; yy++) {
    for(xx=0; xx<=15; xx++) {

      if ( (adr >> 16) != page) {
	page++;
	vga_setpage(page);
      }

      if (*(holemask)) { 
	col=*(gfx);
	*(vga_ptr+(adr&65535))=col;
      }
      
      gfx++;  
      adr++;
      holemask++;
    }
    adr+=624;
    gfx+=16;
  }
}

/*-----------------------------------------------------------------setbullet */
void makehole(int x, int y, int type) {

  static short xx,yy,s,d;
  static uchar *holemask;
  static uchar *gfx;

  x-=15;
  y-=15;

  gfx=&backgnd[((y&31)<<6)+(x&31)];

  holemask=hole[type];

  getbox(x,y,tmpmix);
  
  s=d=0;
  for(yy=0; yy<=31; yy++) {
    for(xx=0; xx<=31; xx++) {
      tmpmix[d]=holemask[d] ? gfx[s] : tmpmix[d];
      s++;
      d++;
    }
    s+=32;
  }

  changeblocks(x,y,tmpmix);

}