Example #1
0
void build_remove(int x,int y)
{
	int nr;

	if (x<0 || x>=MAPX || y<0 || y>=MAPY) return;



	map[x+y*MAPX].fsprite=0;
	map[x+y*MAPX].flags&=~(MF_MOVEBLOCK|MF_SIGHTBLOCK);

	nr=map[x+y*MAPX].it;
	if (!nr) return;

	if (it[nr].active) {
		if (it[nr].light[1])
			do_add_light(x,y,-it[nr].light[1]);
	} else {
		if (it[nr].light[0])
			do_add_light(x,y,-it[nr].light[0]);
	}

	it[nr].used=0;
	map[x+y*MAPX].it=0;

	xlog("build: remove item from %d,%d",x,y);
}
Example #2
0
void add_lights(int x,int y)
{
        int xs,ys,xe,ye,in,cn,v,m;
        unsigned long long prof;

        prof=prof_start();

        xs=max(1,x-LIGHTDIST);
        ys=max(1,y-LIGHTDIST);
        xe=min(MAPX-2,x+1+LIGHTDIST);
        ye=min(MAPY-2,y+1+LIGHTDIST);

        for (y=ys; y<ye; y++) {
                m=y*MAPX+xs;
                for (x=xs; x<xe; x++,m++) {
                        if ((in=map[m].it)!=0) {
                                if (it[in].active) {
                                        if ((v=it[in].light[1])!=0)
                                                do_add_light(x,y,v);
                                } else {
                                        if ((v=it[in].light[0])!=0)
                                                do_add_light(x,y,v);
                                }
                        }
                        if ((cn=map[m].ch)!=0)
                                if ((v=ch[cn].light)!=0)
                                        do_add_light(x,y,v);
                        if (map[m].flags&MF_INDOORS)
                                compute_dlight(x,y);
                }
        }

        prof_stop(20,prof);
}
Example #3
0
void init_lights(void)
{
	int x, y, in, m, cnt1 = 0, cnt2 = 0;

	for (y = m = 0; y<MAPY; y++)
	{
		for (x = 0; x<MAPX; x++, m++)
		{
			map[m].light  = 0;
			map[m].dlight = 0;
		}
	}

	for (y = m = 0; y<MAPY; y++)
	{
		printf("%4d/%4d (%d,%d)\r", y, MAPY, cnt1, cnt2);
		fflush(stdout);
		for (x = 0; x<MAPX; x++, m++)
		{
			if (map[m].flags & MF_INDOORS)
			{
				cnt2++;
				compute_dlight(x, y);
			}
			if ((in = map[m].it)==0)
			{
				continue;
			}
			if (it[in].active)
			{
				if (it[in].light[1])
				{
					do_add_light(x, y, it[in].light[1]);
					cnt1++;
				}
			}
			else
			{
				if (it[in].light[0])
				{
					do_add_light(x, y, it[in].light[0]);
					cnt1++;
				}
			}
		}
	}
}
Example #4
0
void build_drop(int x,int y,int in)
{
	int nr;

	if (x<0 || x>=MAPX || y<0 || y>=MAPY) return;

	if (in&0x40000000) {
		map[x+y*MAPX].flags^=in&0xfffffff;
		return;
	}
	if (in&0x20000000) {
		nr=in&0xfffffff;
		if (nr==1003) { // hack for jungle ground
			nr+=RANDOM(4);
			if (nr>1003) nr++;
		}
		if (nr==542) { // hack for street ground
			nr+=RANDOM(9);
		}
		if (nr==551) { // hack for grass ground
			nr+=RANDOM(4);
		}
		if (nr==133) { // hack for parkett ground
			nr+=RANDOM(9);
		}
		if (nr==142) { // hack for parkett ground
			nr+=RANDOM(4);
		}
		if (nr==170) { // hack for stone ground
			nr+=RANDOM(6);
		}
		if (nr==704) {
			static int tab[4]={704,659,660,688};
			nr=tab[RANDOM(4)];
		}
		if (nr==950) {
			nr+=RANDOM(9);
		}
		if (nr==959) {
			nr+=(x%3)*3+(y%3);
		}
		if (nr==16670) nr+=RANDOM(4);
		if (nr==16933) {
			static int tab[4]={16933,16957,16958,16959};
			nr=tab[RANDOM(4)];
		}

		map[x+y*MAPX].sprite=nr;
		return;
	}

	nr=build_item(in,x,y);
	if (!nr) return;

	if (it[nr].active) {
		if (it[nr].light[1])
			do_add_light(x,y,it[nr].light[1]);
	} else {
		if (it[nr].light[0])
			do_add_light(x,y,it[nr].light[0]);
	}
}