/* Bob.m Class definition. "Bob" is property of the Church of the SubGenius. Address for donations: The Church of the SubGenius PO Box 140306 Dallas, TX 75214 */ #include "cheezmud.h" @implementation Bob + new { self = [super new]; [self describe: "\"Bob\"": "J.R. \"Bob\" Dobbs": "\"Bob\"": "\"Bob\" is smoking and grinning, as usual."]; [[Pipe new] setlocation: self]; ftype = bystander; return self; } /* This is extremely non-orthogonal and duplicates code from Fighter.m. */ /* (But it does have slack) */ - hit: fromwho: (float) damage { id c; if (dead) return self; dead = 1; [location emote: self: "expire": "expires": " in a terminal puff of smoke"]; /* Kluge: theres_a_fight_going_on doesn't work if you get killed in */ /* one swipe, since you are not there for your buddies to query on who */ /* just killed you. This works around that by calling it special just */ /* before you die. */ [location theres_a_fight_going_on]; c = [[[Corpse new] describe: "\"Bob\"": "the corpse of \"Bob\"": "the corpse of \"Bob\"": "Somebody met \"Bob\" on the road, and killed him."] setlocation: location]; [contents elementsPerform: @selector(setlocation:) with: c]; /* Killing "Bob" gets you a big bonus and is the quickest way to level 2. */ [fromwho get_experience: (unsigned long) 100]; [self logout]; return self; } - echo: (char *) text { char n[80], o[80]; if (!strstr (text, " says: ")) return self; if (!strstr (text, "slack") && !strstr (text, "SLACK")) return self; if (sscanf (text, "%s", n) != 1) return self; sprintf (o, "smoke %s", n); [self act: o]; return self; } @end