/* * Item generator 2, a simpler approch to the creation system * * File: Prefix.weapon.c * Descr: This file holds all weapon prefixes called by the * weapon prefix/suffix generator. */ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <ctype.h> #include <stdio.h> #include <string.h> #include <time.h> #include "merc.h" #include "interp.h" #include "magic.h" #include "recycle.h" #include "tables.h" OBJ_DATA * gen_prefix_weapon_poison (OBJ_DATA * obj, int level) { AFFECT_DATA af; char prefix_full[MSL]; af.where = TO_WEAPON; af.level = 20; af.duration = -1; af.location = 0; af.modifier = 0; af.bitvector = WEAPON_POISON; affect_to_obj (obj, &af); sprintf (prefix_full, "a poisoned %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); return (obj); } OBJ_DATA * gen_prefix_weapon_flame (OBJ_DATA * obj, int level) { AFFECT_DATA af; char prefix_full[MSL]; af.where = TO_WEAPON; af.level = 20; af.duration = -1; af.location = 0; af.modifier = 0; af.bitvector = WEAPON_FLAMING; affect_to_obj (obj, &af); sprintf (prefix_full, "a flaming %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); return (obj); } OBJ_DATA * gen_prefix_weapon_frost (OBJ_DATA * obj, int level) { AFFECT_DATA af; char prefix_full[MSL]; af.where = TO_WEAPON; af.level = 20; af.duration = -1; af.location = 0; af.modifier = 0; af.bitvector = WEAPON_FROST; affect_to_obj (obj, &af); sprintf (prefix_full, "a chilling %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); return (obj); } OBJ_DATA * gen_prefix_weapon_electric (OBJ_DATA * obj, int level) { AFFECT_DATA af; char prefix_full[MSL]; af.where = TO_WEAPON; af.level = 20; af.duration = -1; af.location = 0; af.modifier = 0; af.bitvector = WEAPON_SHOCKING; affect_to_obj (obj, &af); sprintf (prefix_full, "an electric %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); return (obj); } OBJ_DATA * gen_prefix_weapon_sharp (OBJ_DATA * obj, int level) { AFFECT_DATA af; char prefix_full[MSL]; af.where = TO_WEAPON; af.level = 20; af.duration = -1; af.location = 0; af.modifier = 0; af.bitvector = WEAPON_SHARP; affect_to_obj (obj, &af); sprintf (prefix_full, "a sharp %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); return (obj); } OBJ_DATA * gen_prefix_weapon_vorpal (OBJ_DATA * obj, int level) { AFFECT_DATA af; char prefix_full[MSL]; af.where = TO_WEAPON; af.level = 20; af.duration = -1; af.location = 0; af.modifier = 0; af.bitvector = WEAPON_VORPAL; affect_to_obj (obj, &af); sprintf (prefix_full, "a vorpal %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); return (obj); } OBJ_DATA * gen_prefix_weapon_maxdam (OBJ_DATA * obj, int level) { char prefix_full[MSL]; if (level >= 50) // Quick hack for range { level = 50; } int selection = number_range(1, level); // Switch on level range int mod; // Now the selection of the modifier switch(selection) { default: mod = number_range(1, 2); sprintf (prefix_full, "a jagged %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); break; case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: mod = number_range(1, 2);; sprintf (prefix_full, "a jagged %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); break; case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: mod = number_range(3, 4);; sprintf (prefix_full, "a deadly %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); break; case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: mod = number_range(5, 6);; sprintf (prefix_full, "a vicious %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); break; case 31: case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: mod = number_range(7, 8);; sprintf (prefix_full, "a brutal %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); break; case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 48: case 49: case 50: mod = number_range(9, 10);; sprintf (prefix_full, "a massive %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); break; } obj->value[2] += mod; return (obj); } OBJ_DATA * gen_prefix_weapon_hitroll (OBJ_DATA * obj, int level) { AFFECT_DATA *af = new_affect (); // aff data // Hack to save item's stats char prefix_full[MSL]; if (level >= 50) // Quick hack for range { level = 50; } int selection = number_range(1, level); // Switch on level range int mod; // Now the selection of the modifier switch(selection) { default: mod = number_range(1, 2); sprintf (prefix_full, "a bronze %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); break; case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: mod = number_range(1, 2); sprintf (prefix_full, "a bronze %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); break; case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: mod = number_range(3, 4); sprintf (prefix_full, "an iron %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); break; case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: mod = number_range(5, 6); sprintf (prefix_full, "a silver %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); break; case 31: case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: mod = number_range(7, 8); sprintf (prefix_full, "a golden %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); break; case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 48: case 49: case 50: mod = number_range(9, 10); sprintf (prefix_full, "a platinum %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); break; } af->location = APPLY_HITROLL; af->modifier = mod; af->where = TO_OBJECT; af->type = 10; af->duration = -1; af->bitvector = 0; af->level = mod; af->next = obj->affected; obj->affected = af; return (obj); } /* * Utility functions for king's prefix */ OBJ_DATA * gen_util_weapon_hitroll (OBJ_DATA * obj, int level) { AFFECT_DATA *af = new_affect (); af->location = APPLY_HITROLL; af->modifier = level; af->where = TO_OBJECT; af->type = 11; af->duration = -1; af->bitvector = 0; af->level = 250; af->next = obj->affected; obj->affected = af; return (obj); } OBJ_DATA * gen_util_weapon_damroll (OBJ_DATA * obj, int level) { AFFECT_DATA *af = new_affect (); af->location = APPLY_DAMROLL; af->modifier = level; af->where = TO_OBJECT; af->type = 11; af->duration = -1; af->bitvector = 0; af->level = 250; af->next = obj->affected; obj->affected = af; return (obj); } OBJ_DATA * gen_prefix_weapon_hitdam (OBJ_DATA * obj, int level) { char prefix_full[MSL]; // AFFECT_DATA *af = new_affect (); // aff data // Hack to save item's stats if (level >= 50) // Quick hack for range { level = 50; } int selection = number_range(1, level); // Switch on level range int mod; switch(selection) { default: mod = number_range(1, 2); sprintf (prefix_full, "a warriors's %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); gen_util_weapon_damroll (obj, mod); gen_util_weapon_hitroll (obj, mod); break; case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: mod = number_range(1, 2); sprintf (prefix_full, "a warriors's %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); gen_util_weapon_damroll (obj, mod); gen_util_weapon_hitroll (obj, mod); break; case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: mod = number_range(3, 4); sprintf (prefix_full, "a barbarian's %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); gen_util_weapon_damroll (obj, mod); gen_util_weapon_hitroll (obj, mod); break; case 31: case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: mod = number_range(5, 6); sprintf (prefix_full, "a soldier's %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); gen_util_weapon_damroll (obj, mod); gen_util_weapon_hitroll (obj, mod); break; case 46: case 47: case 48: case 49: case 50: mod = number_range(7, 8); sprintf (prefix_full, "a warlord's %s", obj->short_descr); obj->short_descr = str_dup (prefix_full); gen_util_weapon_damroll (obj, mod); gen_util_weapon_hitroll (obj, mod); break; } return(obj); }