// Inheritable dragon base file by the hand of Dwimmerlaik // with invaluable aid from Radix. // I would greatly appreciate if you were to refrain from // making any changes to this file unless I know about it. // Dread Dwimmerlaik inherit "obj/monster"; #define AN attacker->query_cap_name() #define DN defender->query_cap_name() void set_age(int i); /* This MUST be set first */ void set_color(string str); void set_breath_type(string type); void set_breath_damage(int d); void set_breath_chance(int c); void set_in_lair(int l); void set_breath_mess(string str); void set_target_mess(string str); void create_dragon(); string color, breath_mess, /* what the room sees */ target_mess, /* what the target sees */ breath_type; int BASE, age, x, l, breath_dam, breath_chance, in_lair; void set_age(int i) { switch(i) { case(1) : case(2) : case(3) : case(4) : case(5) : case(6) : case(7) : case(8) : case(9) : case(10) : case(11) : case(12) : age = i; break; default : age = 4; } } /* set_age() */ void set_color(string str) { switch(str) { case("black") : color = str; BASE = 12; set_align(3000); set_ethics(1000); if(age == 1) { set_level(17); } if(age >= 2 && age <= 3) { set_level(20); } if(age >= 4 && age <= 5) { set_level(23); } if(age >= 6 && age <= 7) { set_level(26); } if(age >= 8 && age <= 9) { set_level(29); } if(age >= 10 && age <= 11) { set_level(32); } if(age == 12) { set_level(35); } break; case("blue") : color = str; BASE = 14; set_align(3000); set_ethics(-1000); if(age == 1) { set_level(22); } if(age >= 2 && age <= 3) { set_level(25); } if(age >= 4 && age <= 5) { set_level(28); } if(age >= 6 && age <= 7) { set_level(31); } if(age >= 8 && age <= 9) { set_level(34); } if(age >= 10 && age <= 11) { set_level(37); } if(age == 12) { set_level(40); } break; case("brass") : color = str; BASE = 12; set_align(-200); set_ethics(1000); if(age == 1) { set_level(17); } if(age >= 2 && age <= 3) { set_level(20); } if(age >= 4 && age <= 5) { set_level(23); } if(age >= 6 && age <= 7) { set_level(26); } if(age >= 8 && age <= 9) { set_level(29); } if(age >= 10 && age <= 11) { set_level(32); } if(age == 12) { set_level(35); } break; case("bronze") : color = str; BASE = 14; set_align(-3000); set_ethics(-2000); if(age == 1) { set_level(22); } if(age >= 2 && age <= 3) { set_level(25); } if(age >= 4 && age <= 5) { set_level(28); } if(age >= 6 && age <= 7) { set_level(31); } if(age >= 8 && age <= 9) { set_level(34); } if(age >= 10 && age <= 11) { set_level(37); } if(age == 12) { set_level(40); } break; case("copper") : color = str; BASE = 13; set_align(-1500); set_ethics(1500); if(age == 1) { set_level(20); } if(age >= 2 && age <= 3) { set_level(23); } if(age >= 4 && age <= 5) { set_level(26); } if(age >= 6 && age <= 7) { set_level(29); } if(age >= 8 && age <= 9) { set_level(32); } if(age >= 10 && age <= 11) { set_level(35); } if(age == 12) { set_level(38); } break; case("gold") : color = str; BASE = 16; set_align(-5500); set_ethics(-5500); if(age == 1) { set_level(32); } if(age >= 2 && age <= 3) { set_level(35); } if(age >= 4 && age <= 5) { set_level(38); } if(age >= 6 && age <= 7) { set_level(41); } if(age >= 8 && age <= 9) { set_level(44); } if(age >= 10 && age <= 11) { set_level(47); } if(age == 12) { set_level(50); } break; case("green") : color = str; BASE = 13; set_align(3000); set_ethics(-1500); if(age == 1) { set_level(20); } if(age >= 2 && age <= 3) { set_level(23); } if(age >= 4 && age <= 5) { set_level(26); } if(age >= 6 && age <= 7) { set_level(29); } if(age >= 8 && age <= 9) { set_level(32); } if(age >= 10 && age <= 11) { set_level(35); } if(age == 12) { set_level(38); } break; case("red") : color = str; BASE = 15; set_align(5500); set_ethics(5500); if(age == 1) { set_level(27); } if(age >= 2 && age <= 3) { set_level(30); } if(age >= 4 && age <= 5) { set_level(33); } if(age >= 6 && age <= 7) { set_level(36); } if(age >= 8 && age <= 9) { set_level(39); } if(age >= 10 && age <= 11) { set_level(42); } if(age == 12) { set_level(45); } break; case("silver") : color = str; BASE = 15; set_align(-2500); set_ethics(-1500); if(age == 1) { set_level(27); } if(age >= 2 && age <= 3) { set_level(30); } if(age >= 4 && age <= 5) { set_level(33); } if(age >= 6 && age <= 7) { set_level(36); } if(age >= 8 && age <= 9) { set_level(39); } if(age >= 10 && age <= 11) { set_level(42); } if(age == 12) { set_level(45); } break; case("white") : color = str; BASE = 11; set_align(3000); set_ethics(3000); if(age == 1) { set_level(12); } if(age >= 2 && age <= 3) { set_level(15); } if(age >= 4 && age <= 5) { set_level(18); } if(age >= 6 && age <= 7) { set_level(21); } if(age >= 8 && age <= 9) { set_level(24); } if(age >= 10 && age <= 11) { set_level(27); } if(age == 12) { set_level(30); } break; default : color = "green"; } } /* set_color() */ void set_breath_type(string type) { switch(type) { case("acid") : case("air") : case("cold") : case("electrical") : case("fire") : case("magic") : case("magical") : case("poison") : breath_type = type; break; default : if(color == "black") breath_type = "acid"; if(color == "blue") breath_type = "electrical"; if(color == "brass") breath_type = "fire"; if(color == "bronze") breath_type = "electrical"; if(color == "copper") breath_type = "acid"; if(color == "gold") breath_type = "fire"; if(color == "green") breath_type = "poison"; if(color == "red") breath_type = "fire"; if(color == "silver") breath_type = "cold"; if(color == "white") breath_type = "cold"; } } /* set_breath_type() */ void set_in_lair(int l) { switch(l) { case(0) : set_aggressive(0); in_lair = l; break; case(1) : set_aggressive(2); adjust_tmp_str(20); adjust_tmp_dex(20); in_lair = l; break; default : in_lair = 0; } } /* set_in_lair() */ void set_breath_damage(int d) { breath_dam = d; } void set_breath_chance(int c) { breath_chance = c; } void set_breath_mess(string str) { breath_mess = str; } void set_target_mess(string str) { target_mess = str; } void create_dragon() { set_name(color+" dragon"); set_short(capitalize(color)+" Dragon"); set_long("This "+query_short()+" is looking rather testy.\n\n"); adjust_tmp_damage_bon(age); set_random_stats(12, 15+random(age)); set_gender(0); set_race("dragon"); add_alias("dragon"); add_alias("Dragon"); set_main_plural(color+" dragons"); add_plural("dragons"); add_plural("Dragons"); set_max_hp( ((BASE + age) * 70) + random(500) ); set_gp(1000); set_cha((random(30)) + (random(age))); set_kill_xp((BASE * age) * 150); set_thac0(100 - (BASE * age)); set_ac(200 - ((BASE * age) + random(100))); set_main_plural(query_short()+"s"); set_breath_mess("\nThe dragon leans forward and gouts its " "fearsome breath!!\n\n"); set_target_mess("\nYou have been gouted upon!!\n\n"); set_breath_damage(50); set_breath_chance(30); set_breath_type(" "); add_property(breath_type, 100); } /* create_dragon() */ int unarmed_attack(object target,object me) { object *att; att = (object*)me->query_attacker_list(); monster::unarmed_attack(att[random(sizeof(att))],me); monster::unarmed_attack(att[random(sizeof(att))],me); monster::unarmed_attack(att[random(sizeof(att))],me); } /* unarmed_attack() */ mixed valid_attack() { int two = random(2); int three = random(3); int four = random(4); int five = random(5); int BREATH = random(100); int CHANCE = breath_chance; int GP = attacker->query_gp(); int TYPE = attacker->query_breath_type(); if(BREATH >= 100 - CHANCE) { if(GP >= 20) { if(x == 0) { say("%^BOLD%^"+AN+" rears its head back and its eyes roll " "over white.\n\n%^RESET%^"); x = x + 1; } else if(x == 1) { x = 0; say("%^BOLD%^YELLOW%^"+breath_mess+"%^RESET%^"); tell_object(defender,sprintf("%-=*s",defender->query_cols(), "%^BOLD%^RED%^"+target_mess+"%^RESET%^")); attacker->adjust_gp(-20); breath_dam=(breath_dam*(100-(int)defender->query_property(TYPE)))/100; defender->adjust_hp(-(age + random(breath_dam))); } } } return([ "knee" :({AN+" slashes "+DN+" with its claws.\n", "You slash "+DN+".\n", AN+" slashes you with its claws.\n"}), "punch" :({AN+" slashes "+DN+" with its claws.\n", "You slash "+DN+".\n", AN+" slashes you with its claws.\n"}), "kick" :({AN+" bites a gaping wound into "+DN+".\n", "You bite "+DN+".\n", AN+" bites a gaping wound into you.\n"}) ]); } /* valid_attack() */ string query_dragon_title(string i) { switch(i) { case(1) : return("hatchling"); break; case(2) : return("very young"); break; case(3) : return("young"); break; case(4) : return("juvenile"); break; case(5) : return("young adult"); break; case(6) : return("adult"); break; case(7) : return("mature adult"); break; case(8) : return("old"); break; case(9) : return("very old"); break; case(10) : return("venerable"); break; case(11) : return("wyrm"); break; case(12) : return("great wyrm"); break; } } /* query_dragon_title() */ int query_dragon() { return(1); } string query_color() { return(color); } string query_dragon_color() { return(color); } string query_race() { return("dragon"); } string query_breath_type() { return (breath_type); } int query_breath_damage() { return (breath_dam); } int query_breath_chance() { return (breath_chance); } int query_in_lair() { return (in_lair); } string query_breath_mess() { return (breath_mess); } string query_target_mess() { return (target_mess); } /************************************************************* ************************************************************** ** Note to anyone wishing to use dragon.c to create a beast ** ** of dragonkind.... ** If you are going to use dragon.c, please look through it and be familiar with what everything does. Set everything that is settable. EVERYTHING. X) : Dread Dwimmerlaik ((=========================================================)) Use this as a psuedo-guide when using dragon.c Dwimmerlaik : Nov. 21, 1995 ((=========================================================)) inherit "/obj/dragon.c"; void setup() { set_name("Ted the raging red dragon"); add_alias("ted"); set_age(6); Settable ages are 1 through 12 ( 1 being a hatchling 12 being a greaty wyrm ); Age presets thac0 and level Age MUST be set first. set_color("red"); Settable colors are : black, blue, brass, bronze, copper, gold, green, red, silver and white. Evil dragons are actual colors, good dragons are the metal colors, i.e. brass, gold, etc. create_dragon(); This must be set to make this monster a dragon. Adds defaults, attacks and special attacks. Also adds logical aliases and plurals, i.e. dragon, dragons, etc. set_breath_type("fire"); Settable types are : acid, cold, electrical, fire, magic, magical, poison. Must set this so that player resistances may be taken into account when hit with the dragon's breath weapon. set_breath_damage(150); Can be set to anything. This is the maximum amount of damage a breath weapon can do in one strike. Damage for this case would be 1 - 150 (*not counting possible player resistances*) set_breath_chance(50); Can be set from 1 - 100. Quite simply, the higher the number, the greater the frequency of times the dragon employs the breath weapon. set_in_lair(1); Can be set either 0 or 1. If set to 1, the dragon will be aggressive to those who enter into the room it is in, otherwise it will sit dormant. set_breath_mess("\nThe dragon rears back and gouts his breath!!\n\n"); This sets the message that the room sees when a dragon employs its breath weapon. set_target_mess("\nOw! That hurt!!\n\n"); This sets the message that the target of the breath weapon sees. ********---- Now comes the traditional stuff ----******** ********---- note that create_dragon(); has ----******** ********---- defaults for most of this ----******** set_short("ted the raging red dragon"); set_long("\nYup.. it's a dragon.\n\n"); ******************************************************************* ******************************************************************/