Exemplo n.º 1
0
int create_special_item(int temp)
{
        int in,mul=1,spr;
        char *pref,*suffix,name[60];

        in=god_create_item(temp);
        if (!in) return 0;

        it[in].temp=0;

        switch(RANDOM(8)) {
                case    0:      pref="Shining "; it[in].light[0]+=10; break;
                case    1:      pref="Godly "; mul=2; break;
                default:        pref=""; break;
        }
	switch(RANDOM(8)) {	// SH 04.04.2000
//        switch(RANDOM(7)) {
                case    0:      suffix=" of the Lion"; it[in].attrib[AT_BRAVE][0]+=4*mul; break;
                case    1:      suffix=" of the Snake"; it[in].attrib[AT_WILL][0]+=4*mul; break;
                case    2:      suffix=" of the Owl"; it[in].attrib[AT_INT][0]+=4*mul; break;
                case    3:      suffix=" of the Weasel"; it[in].attrib[AT_AGIL][0]+=4*mul; break;
                case    4:      suffix=" of the Bear"; it[in].attrib[AT_STREN][0]+=4*mul; break;
                case    5:      suffix=" of Magic"; it[in].mana[0]+=10*mul; break;
                case    6:      suffix=" of Life"; it[in].hp[0]+=10*mul; break;
/* Added by SoulHunter 04.04.2000 */
		case	7:	suffix=" of Defence"; it[in].armor[0]+=2*mul; break;
/* --end */
		default:        suffix=""; break; // not reached!
        }

        switch(temp) {
                case    57:     spr=840; break;
                case    59:     spr=845; break;
                case    63:     spr=830; break;
                case    65:     spr=835; break;
                case    69:     spr=870; break;
                case    71:     spr=875; break;
                case    75:     spr=850; break;
                case    76:     spr=855; break;
                case    94:     spr=860; break;
                case    95:     spr=865; break;
                case    981:    spr=16775; break;
                case    982:    spr=16780; break;
                default:        spr=it[in].sprite[0]; break;
        }

        it[in].sprite[0]=spr;
        it[in].max_damage=0;

        strcpy(name,it[in].name);
        sprintf(it[in].name,"%s%s%s",pref,name,suffix);
        sprintf(it[in].reference,"%s%s%s",pref,name,suffix);
        sprintf(it[in].description,"A %s%s%s.",pref,name,suffix);
        it[in].name[0]=toupper(it[in].name[0]);

        return in;
}
Exemplo n.º 2
0
int soultransform(int cn,int in,int in2,int temp)
{
	god_take_from_char(in,cn);
	god_take_from_char(in2,cn);
	
	it[in].used=USE_EMPTY;
	it[in2].used=USE_EMPTY;
	
	in=god_create_item(temp);
	god_give_char(in,cn);
	
	return in;
}
Exemplo n.º 3
0
int build_item(int nr,int x,int y)
{
	int in,n,m;

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

	if (map[x+y*MAPX].it) return 0;

	xlog("build: add item %d at %d,%d",nr,x,y);

	if (map[x+y*MAPX].fsprite) map[x+y*MAPX].fsprite=0;

	if (it_temp[nr].flags&(IF_TAKE|IF_LOOK|IF_LOOKSPECIAL|IF_USE|IF_USESPECIAL)) {
		in=god_create_item(nr);

		if (it[in].driver==33) {
			for (n=1,m=0; n<MAXITEM; n++) {
				if (it[n].used==USE_EMPTY) continue;
				if (it[n].driver==33) m=max(it[n].data[0],m);
			}

			m++;
			do_area_log(0,0,x,y,1,"Respawn point %d, Level %d.\n",m,diffi);
			it[in].data[0]=m;
			it[in].data[9]=diffi;	// difficulty level
			it[in].temp=0; // make sure it isnt reset when doing #reset
		}

		map[x+y*MAPX].it=in;

		it[in].x=(short)x;
		it[in].y=(short)y;
		it[in].carried=0;		
	} else {
		map[x+y*MAPX].fsprite=it_temp[nr].sprite[0];
		if (it_temp[nr].flags&IF_MOVEBLOCK) map[x+y*MAPX].flags|=MF_MOVEBLOCK;
		if (it_temp[nr].flags&IF_SIGHTBLOCK) map[x+y*MAPX].flags|=MF_SIGHTBLOCK;		
                return 0;
	}

	return in;
}
Exemplo n.º 4
0
void effect_tick(void)
{
	int n,cnt=0,in,m,co,fn,cn,in2,flag,z;

	for (n=1; n<MAXEFFECT; n++) {
		if (fx[n].used==USE_EMPTY) continue;
		cnt++;
		if (fx[n].used!=USE_ACTIVE) continue;

		if (fx[n].type==1) {	// remove injury flag from map
			fx[n].duration--;
			if (fx[n].duration==0) {
				fx[n].used=USE_EMPTY;
				map[fx[n].data[0]+fx[n].data[1]*MAPX].flags&=~(MF_GFX_INJURED|MF_GFX_INJURED1|MF_GFX_INJURED2);
			}
		}

		if (fx[n].type==2) {	// timer for character respawn
			if (fx[n].duration) fx[n].duration--;
			if (fx[n].duration==0 && plr_check_target(fx[n].data[0]+fx[n].data[1]*MAPX)) {
				m=fx[n].data[0]+fx[n].data[1]*MAPX;
				map[m].flags|=MF_MOVEBLOCK;
				fx[n].type=8;
			}
		}

		if (fx[n].type==3) {	// death mist
			fx[n].duration++;
			if (fx[n].duration==19) {

				fx[n].used=0;

				m=fx[n].data[0]+fx[n].data[1]*MAPX;
				map[m].flags&=~MF_GFX_DEATH;
			} else {
				m=fx[n].data[0]+fx[n].data[1]*MAPX;
				map[m].flags&=~MF_GFX_DEATH;
				map[m].flags|=((unsigned long long)fx[n].duration)<<40;

				if (fx[n].duration==9) {
					plr_map_remove(fx[n].data[2]);

					if (can_drop(m)) ;
					else if (can_drop(m+1)) m+=1;
					else if (can_drop(m-1)) m+=-1;
					else if (can_drop(m+MAPX)) m+=MAPX;
					else if (can_drop(m-MAPX)) m+=-MAPX;
					else if (can_drop(m+1+MAPX)) m+=1+MAPX;
					else if (can_drop(m+1-MAPX)) m+=1-MAPX;
					else if (can_drop(m-1+MAPX)) m+=-1+MAPX;
					else if (can_drop(m-1-MAPX)) m+=-1-MAPX;
					else if (can_drop(m+2)) m+=2;
					else if (can_drop(m-2)) m+=-2;
					else if (can_drop(m+2*MAPX)) m+=2*MAPX;
					else if (can_drop(m-2*MAPX)) m+=-2*MAPX;
					else if (can_drop(m+2+MAPX)) m+=2+MAPX;
					else if (can_drop(m+2-MAPX)) m+=2-MAPX;
					else if (can_drop(m-2+MAPX)) m+=-2+MAPX;
					else if (can_drop(m-2-MAPX)) m+=-2-MAPX;
					else if (can_drop(m+1+2*MAPX)) m+=1+2*MAPX;
					else if (can_drop(m+1-2*MAPX)) m+=1-2*MAPX;
					else if (can_drop(m-1+2*MAPX)) m+=-1+2*MAPX;
					else if (can_drop(m-1-2*MAPX)) m+=-1-2*MAPX;
					else if (can_drop(m+2+2*MAPX)) m+=2+2*MAPX;
					else if (can_drop(m+2-2*MAPX)) m+=2-2*MAPX;
					else if (can_drop(m-2+2*MAPX)) m+=-2+2*MAPX;
					else if (can_drop(m-2-2*MAPX)) m+=-2-2*MAPX;
					else {
						int temp;

						co=fx[n].data[2];
						temp=ch[co].temp;
						
						chlog(co,"could not drop grave");

						god_destroy_items(co);
						ch[co].used=USE_EMPTY;
						
						if (ch[co].flags&CF_RESPAWN)
							fx_add_effect(2,TICKS*60*5+RANDOM(TICKS*60*10),ch_temp[temp].x,ch_temp[temp].y,temp);
						m=0;
					}

					if (m) {
						co=fx[n].data[2];

						flag=0;
						for (z=0; z<40 && !flag; z++) {
							if (ch[co].item[z]) { flag=1; break; }
						}
						for (z=0; z<20 && !flag; z++) {
							if (ch[co].worn[z]) { flag=1; break; }
						}
						if (ch[co].citem) flag=1;
						if (ch[co].gold) flag=1;
						
                                                if (flag) {
							map[m].flags|=MF_MOVEBLOCK;
							fn=fx_add_effect(4,0,m%MAPX,m/MAPX,fx[n].data[2]);
							fx[fn].data[3]=fx[n].data[3];
						} else {
							int temp;

							temp=ch[co].temp;

							god_destroy_items(co);
							ch[co].used=USE_EMPTY;

							if (temp && (ch[co].flags&CF_RESPAWN)) {
                                                                if (temp==189 || temp==561) {
									fx_add_effect(2,TICKS*60*20+RANDOM(TICKS*60*5),ch_temp[temp].x,ch_temp[temp].y,temp);									
                                                                } else {
									fx_add_effect(2,TICKS*60*4+RANDOM(TICKS*60*1),ch_temp[temp].x,ch_temp[temp].y,temp);
								}
								xlog("respawn %d (%s): YES",co,ch[co].name);
                                                        } else xlog("respawn %d (%s): NO",co,ch[co].name);
						}
					}
				}
			}
		}

		if (fx[n].type==4) {	// tomb stone
			fx[n].duration++;
			if (fx[n].duration==29) {

				fx[n].used=USE_EMPTY;
				
				co=fx[n].data[2];
				
				m=fx[n].data[0]+fx[n].data[1]*MAPX;
				map[m].flags&=~MF_GFX_TOMB;
				map[m].flags&=~MF_MOVEBLOCK;								

				in=god_create_item(170);				
				it[in].data[0]=co;
				if (ch[co].data[99]) it[in].max_age[0]*=4;

				sprintf(it[in].description,"Here rests %s, killed by %s on the %d%s%s%s%s day of the Year %d.",
					ch[co].reference,
					fx[n].data[3] ? ch[fx[n].data[3]].reference : "unknown causes",
					globs->mdday,
					(globs->mdday==1 ? "st" : ""),
					(globs->mdday==2 ? "nd" : ""),
					(globs->mdday==3 ? "rd" : ""),
					(globs->mdday>3 ? "th" : ""),
					globs->mdyear);
				god_drop_item(in,fx[n].data[0],fx[n].data[1]);
				ch[co].x=it[in].x;
				ch[co].y=it[in].y;
				
				chlog(co,"grave done");
			} else {
				m=fx[n].data[0]+fx[n].data[1]*MAPX;
				map[m].flags&=~MF_GFX_TOMB;
				map[m].flags|=((unsigned long long)fx[n].duration)<<35;
			}
		}

		if (fx[n].type==5) {	// evil magic
			fx[n].duration++;
			m=fx[n].data[0]+fx[n].data[1]*MAPX;
			if (fx[n].duration==8) {

				fx[n].used=USE_EMPTY;
				map[m].flags&=~MF_GFX_EMAGIC;
			} else {
				map[m].flags&=~MF_GFX_EMAGIC;
				map[m].flags|=((unsigned long long)fx[n].duration)<<45;
			}
		}

		if (fx[n].type==6) {	// good magic
			fx[n].duration++;
			m=fx[n].data[0]+fx[n].data[1]*MAPX;
			if (fx[n].duration==8) {

				fx[n].used=USE_EMPTY;
				map[m].flags&=~MF_GFX_GMAGIC;
			} else {
				map[m].flags&=~MF_GFX_GMAGIC;
				map[m].flags|=((unsigned long long)fx[n].duration)<<48;
			}
		}

		if (fx[n].type==7) {	// caster magic
			fx[n].duration++;
			m=fx[n].data[0]+fx[n].data[1]*MAPX;
			if (fx[n].duration==8) {
				fx[n].used=USE_EMPTY;
				map[m].flags&=~MF_GFX_CMAGIC;
			} else {
				map[m].flags&=~MF_GFX_CMAGIC;
				map[m].flags|=((unsigned long long)fx[n].duration)<<51;
			}
		}

		if (fx[n].type==8) {	// repawn mist
			fx[n].duration++;
			if (fx[n].duration==19) {
				fx[n].used=0;
				m=fx[n].data[0]+fx[n].data[1]*MAPX;
				map[m].flags&=~MF_GFX_DEATH;
			} else {
				m=fx[n].data[0]+fx[n].data[1]*MAPX;
				map[m].flags&=~MF_GFX_DEATH;
				map[m].flags|=((unsigned long long)fx[n].duration)<<40;
				if (fx[n].duration==9) {
					m=fx[n].data[0]+fx[n].data[1]*MAPX;
					map[m].flags&=~MF_MOVEBLOCK;
					if (!pop_create_char(fx[n].data[2],1) && (ch_temp[fx[n].data[2]].flags&CF_RESPAWN)) {
						fx[n].type=2;
						fx[n].duration=TICKS*60*5;	// try again every 5 minutes
						map[m].flags&=~MF_GFX_DEATH;
					}
				}
			}
		}
		if (fx[n].type==9) {	// controlled item animation with optional monster creation
			fx[n].duration--;
			in=fx[n].data[0];
			if (!(fx[n].duration&1))
				it[in].status[1]++;

			if (fx[n].duration==0) {
				map[it[in].x+it[in].y*MAPX].it=0;
				if (fx[n].data[1]) {
					cn=pop_create_char(fx[n].data[1],0);
					god_drop_char(cn,it[in].x,it[in].y);
					ch[cn].dir=DX_RIGHTUP;
					plr_reset_status(cn);
				}
				fx[n].used=USE_EMPTY;
				it[in].used=USE_EMPTY;
			}
		}
		if (fx[n].type==10) { // respawn object
			if (fx[n].duration) fx[n].duration--;
			else {
				m=fx[n].data[0]+fx[n].data[1]*MAPX;

				// check if object isnt allowed to respawn (supporting beams for mine)
				if (is_beam(map[m].it) ||
				    is_beam(map[m-1].it) || is_beam(map[m+1].it) ||
				    is_beam(map[m-MAPX].it) || is_beam(map[m+MAPX].it) ||
				
				    is_beam(map[m-2].it) || is_beam(map[m+2].it) ||
				    is_beam(map[m-2*MAPX].it) || is_beam(map[m+2*MAPX].it) ||
				
				    is_beam(map[m-1+1*MAPX].it) || is_beam(map[m+1+1*MAPX].it) ||
				    is_beam(map[m-1-1*MAPX].it) || is_beam(map[m+1-1*MAPX].it) ||
				
				    is_beam(map[m-2+1*MAPX].it) || is_beam(map[m+2+1*MAPX].it) ||
				    is_beam(map[m-2-1*MAPX].it) || is_beam(map[m+2-1*MAPX].it) ||
				
				    is_beam(map[m-1+2*MAPX].it) || is_beam(map[m+1+2*MAPX].it) ||
				    is_beam(map[m-1-2*MAPX].it) || is_beam(map[m+1-2*MAPX].it) ||
				
				    is_beam(map[m-2+2*MAPX].it) || is_beam(map[m+2+2*MAPX].it) ||
				    is_beam(map[m-2-2*MAPX].it) || is_beam(map[m+2-2*MAPX].it)) {
					fx[n].duration=TICKS*60*15;
					continue;
				}
				in2=map[m].it;
				map[m].it=0;

				in=god_create_item(fx[n].data[2]);

				if (!god_drop_item(in,fx[n].data[0],fx[n].data[1])) {
					fx[n].duration=TICKS*60;
					it[in].used=USE_EMPTY;
					map[m].it=in2;
				} else {
					fx[n].used=USE_EMPTY;
					if (in2) it[in2].used=USE_EMPTY;
					reset_go(fx[n].data[0],fx[n].data[1]);
				}
			}
		}
		if (fx[n].type==11) {	// remove queued spell flags
			fx[n].duration--;
			if (fx[n].duration<1) {
				fx[n].used=USE_EMPTY;
				ch[fx[n].data[0]].data[96]&=~fx[n].data[1];
			}
		}
                if (fx[n].type==12) {	// death mist
			fx[n].duration++;
			if (fx[n].duration==19) {

				fx[n].used=0;

				m=fx[n].data[0]+fx[n].data[1]*MAPX;
				map[m].flags&=~MF_GFX_DEATH;
			} else {

				m=fx[n].data[0]+fx[n].data[1]*MAPX;
				map[m].flags&=~MF_GFX_DEATH;
				map[m].flags|=((unsigned long long)fx[n].duration)<<40;
                        }

		}
	}
	globs->effect_cnt=cnt;
}
Exemplo n.º 5
0
int pop_create_char(int n, int drop)
{
	int cn, tmp, m, flag = 0, hasitems = 0, chance;

	for (cn = 1; cn<MAXCHARS; cn++)
	{
		if (ch[cn].used==USE_EMPTY)
		{
			break;
		}
	}
	if (cn==MAXCHARS)
	{
		xlog("MAXCHARS reached!\n");
		return( 0);
	}

	ch[cn] = ch_temp[n];
	ch[cn].pass1 = RANDOM(0x3fffffff);
	ch[cn].pass2 = RANDOM(0x3fffffff);
	ch[cn].temp  = n;

	for (m = 0; m<40; m++)
	{
		if ((tmp = ch[cn].item[m])!=0)
		{
			tmp = god_create_item(tmp);
			if (!tmp)
			{
				flag = 1;
				ch[cn].item[m] = 0;
			}
			else
			{
				it[tmp].carried = cn;
				ch[cn].item[m]  = tmp;
				hasitems = 1;
			}
		}
	}

	for (m = 0; m<20; m++)
	{
		if ((tmp = ch[cn].worn[m])!=0)
		{
			tmp = pop_create_item(tmp, cn);
			if (!tmp)
			{
				flag = 1;
				ch[cn].worn[m] = 0;
			}
			else
			{
				it[tmp].carried = cn;
				ch[cn].worn[m]  = tmp;
				hasitems = 1;
			}
		}
	}

	for (m = 0; m<20; m++)
	{
		if (ch[cn].spell[m]!=0)
		{
			ch[cn].spell[m] = 0;
		}
	}

	if ((tmp = ch[cn].citem)!=0)
	{
		tmp = god_create_item(tmp);
		if (!tmp)
		{
			flag = 1;
			ch[cn].citem = 0;
		}
		else
		{
			it[tmp].carried = cn;
			ch[cn].citem = tmp;
		}
	}

	if (flag)
	{
		god_destroy_items(cn);
		ch[cn].used = USE_EMPTY;
		return(0);
	}

	ch[cn].a_end = 1000000;
	ch[cn].a_hp  = 1000000;
	if (ch[cn].skill[SK_MEDIT][0])
	{
		ch[cn].a_mana = 1000000;
	}
	else
	{
		ch[cn].a_mana = RANDOM(8) * RANDOM(8) * RANDOM(8) * RANDOM(8) * 100;
	}
	ch[cn].dir = DX_DOWN;
	ch[cn].data[92] = TICKS * 60;

	chance = 25;
	if (!ch[cn].skill[SK_MEDIT][0] && ch[cn].a_mana>15 * 100)
	{
		chance -= 6;
	}
	if (!ch[cn].skill[SK_MEDIT][0] && ch[cn].a_mana>30 * 100)
	{
		chance -= 6;
	}
	if (!ch[cn].skill[SK_MEDIT][0] && ch[cn].a_mana>65 * 100)
	{
		chance -= 6;
	}

	if (ch[cn].alignment<0)
	{
		for (m = 0; m<40; m++)
		{
			if (ch[cn].item[m]==0 && hasitems)
			{
				// this check placed here for speed reasons
				// they are the same as in pop_create_bonus_belt()
				if (RANDOM(chance) == 0)
				{
					tmp = pop_create_bonus(cn, chance);
					if (tmp)
					{
						it[tmp].carried = cn;
						ch[cn].item[m]  = tmp;
					}
				}
				break;
			}
		}

/*	Added by SoulHunter  04.04.2000	*/
		// creating rainbow belts
		for (m = 0; m<40; m++)
		{
			if (ch[cn].item[m]==0 && hasitems)
			{
				//	item will be created with chance 1 from 10000
				// this check placed here for speed reasons
				if (RANDOM(10000) == 0)
				{
					tmp = pop_create_bonus_belt(cn);
					if (tmp)
					{
						it[tmp].carried = cn;
						ch[cn].item[m]  = tmp;
					}
				}
				break;
			}
		}
/*	--end	*/

	}

	if (drop)
	{
		if (!god_drop_char(cn, ch[cn].x, ch[cn].y))
		{
			printf("Could not drop char %d\n", n);
			god_destroy_items(cn);
			ch[cn].used = USE_EMPTY;
			return(0);
		}
	}

	do_update_char(cn);
	globs->npcs_created++;
	return(cn);
}
Exemplo n.º 6
0
int pop_create_item(int temp, int cn)
{
	int in = 0;

	if (!in && ch[cn].alignment<0 && !RANDOM(150))
	{
		switch(temp)                                            // gorn uniques
		{
		case    27:
			in = god_create_item(542);
			break;                                          // bronze dagger
		case    28:
			in = god_create_item(543);
			break;                                          // steel dagger
		case    29:
			in = god_create_item(544);
			break;                                          // gold dagger
		case    30:
			in = god_create_item(545);
			break;                                          // crystal dagger
		case    523:
			in = god_create_item(546);
			break;                                          // titan dagger
		case    31:
			in = god_create_item(547);
			break;                                          // bronze sword
		case    32:
			in = god_create_item(548);
			break;                                          // steel sword
		case    33:
			in = god_create_item(549);
			break;                                          // gold sword
		case    34:
			in = god_create_item(550);
			break;                                          // crystal sword
		case    524:
			in = god_create_item(551);
			break;                                          // titan sword
		case    35:
			in = god_create_item(552);
			break;                                          // bronze two
		case    36:
			in = god_create_item(553);
			break;                                          // steel two
		case    37:
			in = god_create_item(554);
			break;                                          // gold two
		case    38:
			in = god_create_item(555);
			break;                                          // crystal two
		case    125:
			in = god_create_item(556);
			break;                                          // titan two
		default:
			break;
		}
	}

	if (!in && ch[cn].alignment<0 && !RANDOM(150))
	{
		switch(temp)                                            // kwai uniques
		{
		case    27:
			in = god_create_item(527);
			break;                                          // bronze dagger
		case    28:
			in = god_create_item(528);
			break;                                          // steel dagger
		case    29:
			in = god_create_item(529);
			break;                                          // gold dagger
		case    30:
			in = god_create_item(530);
			break;                                          // crystal dagger
		case    523:
			in = god_create_item(531);
			break;                                          // titan dagger
		case    31:
			in = god_create_item(532);
			break;                                          // bronze sword
		case    32:
			in = god_create_item(533);
			break;                                          // steel sword
		case    33:
			in = god_create_item(534);
			break;                                          // gold sword
		case    34:
			in = god_create_item(535);
			break;                                          // crystal sword
		case    524:
			in = god_create_item(536);
			break;                                          // titan sword
		case    35:
			in = god_create_item(537);
			break;                                          // bronze two
		case    36:
			in = god_create_item(538);
			break;                                          // steel two
		case    37:
			in = god_create_item(539);
			break;                                          // gold two
		case    38:
			in = god_create_item(540);
			break;                                          // crystal two
		case    125:
			in = god_create_item(541);
			break;                                          // titan two
		default:
			break;
		}
	}

	if (!in && ch[cn].alignment<0 && !RANDOM(150))
	{
		switch(temp)                                            // purple one uniques
		{
		case    27:
			in = god_create_item(572);
			break;                                          // bronze dagger
		case    28:
			in = god_create_item(573);
			break;                                          // steel dagger
		case    29:
			in = god_create_item(574);
			break;                                          // gold dagger
		case    30:
			in = god_create_item(575);
			break;                                          // crystal dagger
		case    523:
			in = god_create_item(576);
			break;                                          // titan dagger
		case    31:
			in = god_create_item(577);
			break;                                          // bronze sword
		case    32:
			in = god_create_item(578);
			break;                                          // steel sword
		case    33:
			in = god_create_item(579);
			break;                                          // gold sword
		case    34:
			in = god_create_item(580);
			break;                                          // crystal sword
		case    524:
			in = god_create_item(581);
			break;                                          // titan sword
		case    35:
			in = god_create_item(582);
			break;                                          // bronze two
		case    36:
			in = god_create_item(583);
			break;                                          // steel two
		case    37:
			in = god_create_item(584);
			break;                                          // gold two
		case    38:
			in = god_create_item(585);
			break;                                          // crystal two
		case    125:
			in = god_create_item(586);
			break;                                          // titan two
		default:
			break;
		}
	}


	if (!in && ch[cn].alignment<0 && !RANDOM(150))
	{
		switch(temp)                                            // skua uniques
		{
		case    27:
			in = god_create_item(280);
			break;                                          // bronze dagger
		case    28:
			in = god_create_item(281);
			break;                                          // steel dagger
		case    29:
			in = god_create_item(282);
			break;                                          // gold dagger
		case    30:
			in = god_create_item(283);
			break;                                          // crystal dagger
		case    523:
			in = god_create_item(525);
			break;                                          // titan dagger
		case    31:
			in = god_create_item(284);
			break;                                          // bronze sword
		case    32:
			in = god_create_item(285);
			break;                                          // steel sword
		case    33:
			in = god_create_item(286);
			break;                                          // gold sword
		case    34:
			in = god_create_item(287);
			break;                                          // crystal sword
		case    524:
			in = god_create_item(526);
			break;                                          // titan sword
		case    35:
			in = god_create_item(288);
			break;                                          // bronze two
		case    36:
			in = god_create_item(289);
			break;                                          // steel two
		case    37:
			in = god_create_item(290);
			break;                                          // gold two
		case    38:
			in = god_create_item(291);
			break;                                          // crystal two
		case    125:
			in = god_create_item(292);
			break;                                          // titan two
		default:
			break;
		}
	}
	if (!in)
	{
		in = god_create_item(temp);
		if (in && it[in].max_damage>0)
		{
			if (RANDOM(2))
			{
				it[in].current_damage = it[in].max_damage + 1;
				item_age(in);
			}
			it[in].current_damage = RANDOM(it[in].max_damage);
		}
	}
	else
	{
		xlog("%s got unique item %s.", ch[cn].name, it[in].name);
	}

	return(in);
}
Exemplo n.º 7
0
/*	Added by SoulHunter  04.04.2000	*/
int pop_create_bonus_belt(int cn)
{
	int n = 1106;   // value to store id-number of created belt
	                // at start it contains template of 'rainbow_belt'
	int i, j;
	int rank, skill_value, skill_number;


//	item will be created with chance 1 from 10000
//	if (RANDOM(10000)) return 0;
//      it is moved outside the function cause item is rarely created
//      but function is called each time when NPC respawning.
//	so it will be much faster if it will check for chances before
//	the function call

	// MAX_POWER = rank
	// MAX_SKILLS = rank
	rank = points2rank(ch[cn].points_tot);  // private wont get this belt
	if(!rank)
	{
		return( 0);                     //

	}
	if (n)
	{
		n = god_create_item(n);   // creating belt from template
		if(!n)
		{
			return( 0);     // return if failed
		}
		// problem is if we keep template for newly created and
		// then changed item, it sometimes doesnt keep changes
		// we need template number for is_belt() function
		// but seems there is some checks by template so we reset it
		// and people wont notice belt :)
		it[n].temp = 0; // clearing template
		it[n].sprite[0] = 16964;
		strcpy(it[n].name, "Rainbow Belt");
		strcpy(it[n].description, "An ancient belt. It seems to be highly magical");
		strcpy(it[n].reference, "rainbow belt");
		// putting message about created belt into log-file
		chlog(cn, ", with rank %d, got %s (t=%d)", rank, it[n].name, it[n].temp);
	}

	j = RANDOM(rank); // how many skills will be in belt?
	if(j==0)
	{
		j = 1;          //
	}
	it[n].power += 5 * j;     // counting power of item, *remind* power = 10 in template
	it[n].value += 10000 * j; // counting price value, value = 100 in template
	// here we decide which skills will be in belt, not more than rank
	for(i = 0; i < j; i++)
	{
		skill_number = RANDOM(39); // which skill it will be
		skill_value  = RANDOM(rank);    // with that value of skill
		skill_value  = skill_value >> 1; // divide it by 2, cause it cant be more than 12 (max_rank/2)
		if(skill_value == 0)
		{
			skill_value = 1;              // and cant be zero
		}
		// the following code put all these skills in belt
		// sometimes requirements are zeroed, cause if we have, in example,
		// dagger and sword skills in belt, this belt can be used only by
		// templar/seyan, but i dont want this
		switch(skill_number)
		{
		case 0:
			// this line is how much it will raise attribute
			it[n].attrib[AT_BRAVE][0] += skill_value;
			// this will check for max level = 12
			// and if it is reached, will down it back to 12
			if(it[n].attrib[AT_BRAVE][0] > 12)
			{
				it[n].attrib[AT_BRAVE][0] = 12;
			}
			// this line will set requirements
			it[n].attrib[AT_BRAVE][2] = 10 +
			                            (it[n].attrib[AT_BRAVE][0] * RANDOM(7));
			break;
		case 1:
			it[n].attrib[AT_WILL][0] += skill_value;
			if(it[n].attrib[AT_WILL][0] > 12)
			{
				it[n].attrib[AT_WILL][0] = 12;
			}
			it[n].attrib[AT_WILL][2] = 10 +
			                           (it[n].attrib[AT_WILL][0] * RANDOM(7));
			break;
		case 2:
			it[n].attrib[AT_INT][0] += skill_value;
			if(it[n].attrib[AT_INT][0] > 12)
			{
				it[n].attrib[AT_INT][0] = 12;
			}
			it[n].attrib[AT_INT][2] = 10 +
			                          (it[n].attrib[AT_INT][0] * RANDOM(7));
			break;
		case 3:
			it[n].attrib[AT_AGIL][0] += skill_value;
			if(it[n].attrib[AT_AGIL][0] > 12)
			{
				it[n].attrib[AT_AGIL][0] = 12;
			}
			it[n].attrib[AT_AGIL][2] = 10 +
			                           (it[n].attrib[AT_AGIL][0] * RANDOM(7));
			break;
		case 4:
			it[n].attrib[AT_STREN][0] += skill_value;
			if(it[n].attrib[AT_STREN][0] > 12)
			{
				it[n].attrib[AT_STREN][0] = 12;
			}
			it[n].attrib[AT_STREN][2] = 10 +
			                            (it[n].attrib[AT_STREN][0] * RANDOM(7));
			break;
		case 5:
			it[n].hp[0] += (skill_value * 5);
			if(it[n].hp[0] > 60)
			{
				it[n].hp[0] = 60;
			}
			it[n].hp[2] = 50 +
			              (it[n].hp[0] * RANDOM(7));
			break;
		case 6:
			it[n].end[0] += (skill_value * 5);
			if(it[n].end[0] > 60)
			{
				it[n].end[0] = 60;
			}
			it[n].end[2] = 50 +
			               (it[n].end[0] * RANDOM(7));
			break;
		case 7:
			it[n].mana[0] += (skill_value * 5);
			if(it[n].mana[0] > 60)
			{
				it[n].mana[0] = 60;
			}
			it[n].mana[2] = 50 +
			                (it[n].mana[0] * RANDOM(7));
			break;
		case 8:
			it[n].armor[0] += skill_value;
			if(it[n].armor[0] > 12)
			{
				it[n].armor[0] = 12;
			}
			break;
		case 9:
			it[n].skill[SK_WARCRY][0] += skill_value;
			if(it[n].skill[SK_WARCRY][0] > 12)
			{
				it[n].skill[SK_WARCRY][0] = 12;
			}
			break;
		case 10:
			it[n].skill[SK_HAND][0] += skill_value;
			if(it[n].skill[SK_HAND][0] > 12)
			{
				it[n].skill[SK_HAND][0] = 12;
			}
			it[n].skill[SK_HAND][2] =
				(it[n].skill[SK_HAND][0] * RANDOM(7));
			break;
		case 11:
			it[n].skill[SK_SWORD][0] += skill_value;
			if(it[n].skill[SK_SWORD][0] > 12)
			{
				it[n].skill[SK_SWORD][0] = 12;
			}
			break;
		case 12:
			it[n].skill[SK_DAGGER][0] += skill_value;
			if(it[n].skill[SK_DAGGER][0] > 12)
			{
				it[n].skill[SK_DAGGER][0] = 12;
			}
			break;
		case 13:
			it[n].skill[SK_TWOHAND][0] += skill_value;
			if(it[n].skill[SK_TWOHAND][0] > 12)
			{
				it[n].skill[SK_TWOHAND][0] = 12;
			}
			break;
		case 14:
			it[n].skill[SK_LOCK][0] += skill_value;
			if(it[n].skill[SK_LOCK][0] > 12)
			{
				it[n].skill[SK_LOCK][0] = 12;
			}
			it[n].skill[SK_LOCK][2] =
				(it[n].skill[SK_LOCK][0] * RANDOM(7));
			break;
		case 15:
			it[n].skill[SK_STEALTH][0] += skill_value;
			if(it[n].skill[SK_STEALTH][0] > 12)
			{
				it[n].skill[SK_STEALTH][0] = 12;
			}
			break;
		case 16:
			it[n].skill[SK_PERCEPT][0] += skill_value;
			if(it[n].skill[SK_PERCEPT][0] > 12)
			{
				it[n].skill[SK_PERCEPT][0] = 12;
			}
			it[n].skill[SK_PERCEPT][2] =
				(it[n].skill[SK_PERCEPT][0] * RANDOM(7));
			break;
		case 17:
			it[n].skill[SK_MSHIELD][0] += skill_value;
			if(it[n].skill[SK_MSHIELD][0] > 12)
			{
				it[n].skill[SK_MSHIELD][0] = 12;
			}
			break;
		case 18:
			it[n].skill[SK_BARTER][0] += skill_value;
			if(it[n].skill[SK_BARTER][0] > 12)
			{
				it[n].skill[SK_BARTER][0] = 12;
			}
			it[n].skill[SK_BARTER][2] =
				(it[n].skill[SK_BARTER][0] * RANDOM(7));
			break;
		case 19:
			it[n].skill[SK_REPAIR][0] += skill_value;
			if(it[n].skill[SK_REPAIR][0] > 12)
			{
				it[n].skill[SK_REPAIR][0] = 12;
			}
			it[n].skill[SK_REPAIR][2] =
				(it[n].skill[SK_REPAIR][0] * RANDOM(7));
			break;
		case 20:
			it[n].skill[SK_LIGHT][0] += skill_value;
			if(it[n].skill[SK_LIGHT][0] > 12)
			{
				it[n].skill[SK_LIGHT][0] = 12;
			}
			it[n].skill[SK_LIGHT][2] =
				(it[n].skill[SK_LIGHT][0] * RANDOM(7));
			break;
		case 21:
			it[n].skill[SK_RECALL][0] += skill_value;
			if(it[n].skill[SK_RECALL][0] > 12)
			{
				it[n].skill[SK_RECALL][0] = 12;
			}
			it[n].skill[SK_RECALL][2] =
				(it[n].skill[SK_RECALL][0] * RANDOM(7));
			break;
		case 22:
			it[n].skill[SK_PROTECT][0] += skill_value;
			if(it[n].skill[SK_PROTECT][0] > 12)
			{
				it[n].skill[SK_PROTECT][0] = 12;
			}
			it[n].skill[SK_PROTECT][2] =
				(it[n].skill[SK_PROTECT][0] * RANDOM(7));
			break;
		case 23:
			it[n].skill[SK_ENHANCE][0] += skill_value;
			if(it[n].skill[SK_ENHANCE][0] > 12)
			{
				it[n].skill[SK_ENHANCE][0] = 12;
			}
			it[n].skill[SK_ENHANCE][2] =
				(it[n].skill[SK_ENHANCE][0] * RANDOM(7));
			break;
		case 24:
			it[n].skill[SK_STUN][0] += skill_value;
			if(it[n].skill[SK_STUN][0] > 12)
			{
				it[n].skill[SK_STUN][0] = 12;
			}
			break;
		case 25:
			it[n].skill[SK_CURSE][0] += skill_value;
			if(it[n].skill[SK_CURSE][0] > 12)
			{
				it[n].skill[SK_CURSE][0] = 12;
			}
			break;
		case 26:
			it[n].skill[SK_BLESS][0] += skill_value;
			if(it[n].skill[SK_BLESS][0] > 12)
			{
				it[n].skill[SK_BLESS][0] = 12;
			}
			it[n].skill[SK_BLESS][2] =
				(it[n].skill[SK_BLESS][0] * RANDOM(7));
			break;
		case 27:
			it[n].skill[SK_IDENT][0] += skill_value;
			if(it[n].skill[SK_IDENT][0] > 12)
			{
				it[n].skill[SK_IDENT][0] = 12;
			}
			it[n].skill[SK_IDENT][2] =
				(it[n].skill[SK_IDENT][0] * RANDOM(7));
			break;
		case 28:
			it[n].skill[SK_RESIST][0] += skill_value;
			if(it[n].skill[SK_RESIST][0] > 12)
			{
				it[n].skill[SK_RESIST][0] = 12;
			}
			it[n].skill[SK_RESIST][2] =
				(it[n].skill[SK_RESIST][0] * RANDOM(7));
			break;
		case 29:
			it[n].skill[SK_BLAST][0] += skill_value;
			if(it[n].skill[SK_BLAST][0] > 12)
			{
				it[n].skill[SK_BLAST][0] = 12;
			}
			break;
		case 30:
			it[n].skill[SK_DISPEL][0] += skill_value;
			if(it[n].skill[SK_DISPEL][0] > 12)
			{
				it[n].skill[SK_DISPEL][0] = 12;
			}
			break;
		case 31:
			it[n].skill[SK_HEAL][0] += skill_value;
			if(it[n].skill[SK_HEAL][0] > 12)
			{
				it[n].skill[SK_HEAL][0] = 12;
			}
			it[n].skill[SK_HEAL][2] =
				(it[n].skill[SK_HEAL][0] * RANDOM(7));
			break;
		case 32:
			it[n].skill[SK_GHOST][0] += skill_value;
			if(it[n].skill[SK_GHOST][0] > 12)
			{
				it[n].skill[SK_GHOST][0] = 12;
			}
			break;
		case 33:
			it[n].skill[SK_REGEN][0] += skill_value;
			if(it[n].skill[SK_REGEN][0] > 12)
			{
				it[n].skill[SK_REGEN][0] = 12;
			}
			break;
		case 34:
			it[n].skill[SK_REST][0] += skill_value;
			if(it[n].skill[SK_REST][0] > 12)
			{
				it[n].skill[SK_REST][0] = 12;
			}
			it[n].skill[SK_REST][2] =
				(it[n].skill[SK_REST][0] * RANDOM(7));
			break;
		case 35:
			it[n].skill[SK_MEDIT][0] += skill_value;
			if(it[n].skill[SK_MEDIT][0] > 12)
			{
				it[n].skill[SK_MEDIT][0] = 12;
			}
			break;
		case 36:
			it[n].skill[SK_SENSE][0] += skill_value;
			if(it[n].skill[SK_SENSE][0] > 12)
			{
				it[n].skill[SK_SENSE][0] = 12;
			}
			it[n].skill[SK_SENSE][2] =
				(it[n].skill[SK_SENSE][0] * RANDOM(7));
			break;
		case 37:
			it[n].skill[SK_IMMUN][0] += skill_value;
			if(it[n].skill[SK_IMMUN][0] > 12)
			{
				it[n].skill[SK_IMMUN][0] = 12;
			}
			break;
		case 38:
			it[n].skill[SK_SURROUND][0] += skill_value;
			if(it[n].skill[SK_SURROUND][0] > 12)
			{
				it[n].skill[SK_SURROUND][0] = 12;
			}
			break;
		case 39:
			it[n].skill[SK_CONCEN][0] += skill_value;
			if(it[n].skill[SK_CONCEN][0] > 12)
			{
				it[n].skill[SK_CONCEN][0] = 12;
			}
			break;
// this will be created in future, right now it is not needed
/*		case 40:
                        it[n].weapon[0] += skill_value;
                        if(it[n].weapon[0] > 12)
                        {
                                it[n].weapon[0] = 12;
                        }
                        break; */
		default:
			break;
		}
	}

	return(n);

}
Exemplo n.º 8
0
int pop_create_bonus(int cn, int chance)
{
	int n;

	// this check removed from here for speed reasons
	// they are the same as in pop_create_bonus_belt()
	// if (RANDOM(chance)) return 0;

	if (ch[cn].points_tot>20000000)
	{
		static int gitem[] = {273, 274, 693, 273, 274, 694, 273, 274, 695, 273, 274, 696, 273, 274, 697, 273, 274, 698, 361, 360, 487, 361, 360, 488, 361, 360, 489, 337, 361, 292, 525, 526};
		static int item[]  = {273, 274};

		if (RANDOM(5))
		{
			n = RANDOM(sizeof(item) / sizeof(int));
			n = item[n];
		}
		else
		{
			n = RANDOM(sizeof(gitem) / sizeof(int));
			n = gitem[n];
		}
	}
	else if (ch[cn].points_tot>1500000)
	{
		static int gitem[] = {273, 274, 699, 273, 274, 700, 273, 274, 701, 273, 274, 702, 273, 274, 703, 273, 274, 704, 361, 360, 347, 361, 360, 344, 361, 360, 341, 337, 283, 287, 291};
		static int item[]  = {273, 274};

		if (RANDOM(5))
		{
			n = RANDOM(sizeof(item) / sizeof(int));
			n = item[n];
		}
		else
		{
			n = RANDOM(sizeof(gitem) / sizeof(int));
			n = gitem[n];
		}
	}
	else if (ch[cn].points_tot>125000)
	{
		static int gitem[] = {101, 102, 705, 101, 102, 706, 101, 102, 707, 101, 102, 708, 101, 102, 709, 101, 102, 710, 360, 338, 361, 340, 361, 343, 361, 346, 282, 286, 290};
		static int item[]  = {101, 102};

		if (RANDOM(5))
		{
			n = RANDOM(sizeof(item) / sizeof(int));
			n = item[n];
		}
		else
		{
			n = RANDOM(sizeof(gitem) / sizeof(int));
			n = gitem[n];
		}
	}
	else if (ch[cn].points_tot>11250)
	{
		static int gitem[] = {18, 46, 711, 18, 46, 712, 18, 46, 713, 18, 46, 714, 18, 46, 715, 18, 46, 716, 360, 338, 361, 339, 361, 342, 361, 345, 281, 285, 289};
		static int item[]  = {18, 46, 100};

		if (RANDOM(5))
		{
			n = RANDOM(sizeof(item) / sizeof(int));
			n = item[n];
		}
		else
		{
			n = RANDOM(sizeof(gitem) / sizeof(int));
			n = gitem[n];
		}
	}
	else
	{
		static int gitem[] = {18, 46, 361, 348, 18, 46, 351, 18, 46, 354, 361, 338, 280, 284, 288};
		static int item[]  = {18, 46, 100};

		if (RANDOM(5))
		{
			n = RANDOM(sizeof(item) / sizeof(int));
			n = item[n];
		}
		else
		{
			n = RANDOM(sizeof(gitem) / sizeof(int));
			n = gitem[n];
		}
	}

	if (n)
	{
		n = god_create_item(n);

		chlog(cn, "got %s (t=%d)", it[n].name, it[n].temp);
	}

	return(n);

}