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; }
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; }
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; }
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; }
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); }
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); }
/* 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); }
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); }