# Rank 3 Monsters (Weak) Name: emoticon Desc: Its exuberant grin merely masks a life of immaturity and a rather nasty-looking spiked tongue. It looks like this: :P. Str: 3..6 Def: 5..8 HP: 10..20 TP: 5..10 Rank: 3 {TongueSlash} (2) <( # Adjacent only. my ($self, $enemy) = @_; # Always hit. my $damage = 2 + random(3, $self->g("Str")); # Disregard armour. Gets you in the face. $self->msg("[1P] slimy, spiked tongue slithers out and catches you across the face, delivering $damage damage!", $self, $enemy); $enemy->take_damage($damage); return 1; )> {AnnoyingLaugh} (3) <( # Annoys you, preventing next attack. Anywhere in vicinity. my ($self, $enemy) = @_; $enemy->react( to => ["Before", "attack"], when => 1, by => sub { $enemy->msg("[subj] [are/is] too overcome with giggles!"); return -1; }, Name => "LAUGHING" ); $self->msg("[subj] emits an annoying, high-pitched laugh that really bugs [1].", $enemy); $enemy->{Laughing}++; # Remove reaction in 3 turns. $enemy->delayevent(3, sub { my $enemy = shift; $enemy->msg("[subj] pull yourself together."); $enemy->eventoff("LAUGHING"); $enemy->{ModeLaugh} = 0; $enemy->{Laughing}--; }); $enemy->{ModeLaugh} = 1; return 1; )> Symbol: Red P Behavior: <( if TP_lower(2), run() if adjacent(), attack(TongueSlash) if near(8) and TP_higher(2) and percent(30), attack(AnnoyingLaugh) else stupid_chase() )> Exp: 2 Name: code bug Desc: You spent hours questioning your sanity over this one. Though it was finally fixed, it returns in your nightmare as an oversized pulsating worm-like organism. Str: 2..4 Def: 4..6 HP: 15..20 TP: 7..10 Rank: 3 {InduceHeadache} (3) <( # Lowers TP. anywhere. my ($self, $enemy) = @_; my $tp = random(3, 5); $enemy->{TP} -= $tp; $enemy->{TP} = 0 if $enemy->{TP} < 0; $self->msg("Gah! Why is that bloody value uninitialized?! This is hurting [1P] head!", $enemy); return 1; )> {LeechConcentration} (5) <( # Adjacent my ($self, $enemy) = @_; my $damage = int((15 * $self->g("Str") * $enemy->g("HP")) / 100); $self->{HP} += $damage; $self->{HP} = $self->g("MaxHP") if $self->{HP} > $self->g("MaxHP"); $self->msg("[subj] leeches $damage HP from [1].", $enemy); $enemy->take_damage($damage); return 1; )> Symbol: green b {UTIL_Init} <( my $self = shift; my $sub = sub { my $self = shift; my $x = random(50, 400); my $method = chooserand(qw(go move eat equip wield levelup die destroy)); say chooserand( "Use of uninitialized value in hash key on line $x!", "Can't call method $method on undefined object at line $x!", "You just suck as a programmer. Haha.", "Error: Data::Dumper's debug routine is randomly deciding not to work, probably because of something you've done." ) if $Game->{Active}{ $self->{ID} }; return -13; }; $self->delayevent(5, $sub); )> Behavior: <( if TP_lower(3), run() if adjacent() and TP_higher(4), attack(LeechConcentration) if near(8) and percent(50), attack(InduceHeadache) else stupid_chase() )> Exp: 4..6 Name: penguin Desc: Aw, what's a cute, lovable little stuffed Tux doing here in-- OH. It's teeth are a bit sharp, its red eyes fix you to one spot, and why's it holding that pitchfork...? Str: 7..12 Def: 6..10 HP: 15..27 TP: 0 Rank: 3 #Attacks: None! Symbol: red l Equipment: pitchfork (Weapon) Behavior: <( if adjacent(), attack(weapon_attack) else smart_chase() )> Exp: 10..15 Name: joke Desc: Somehow you trust that it's just a joke, but why is she so malicious? Str: 3..7 Def: 4..7 HP: 10..19 TP: 0 Rank: 3 # Throw is an attack?! OK, sure. {Throw} (0) <( # USE MONSTER SHOOOOOOOOOOOT ROUTINEY? Nah, we always hit my ($self, $enemy) = @_; # Animation! Later. my $damage = random(2, $self->g("Str")); $enemy->msg("Ow! [1] pelts [subj] with a jawbreaker. It hurts in a deeper way than merely costing you $damage HP.", $self); $enemy->take_damage($damage); # Pretend we actually used one... $enemy->{Area}->inv($enemy->{Y}, $enemy->{X}, "add", $Game->{Content}{jawbreaker}->new); return 1; )> Symbol: aqua j Behavior: <( if lined_up() and near(8), attack(Throw) else smart_chase() )> Exp: 4..8 Name: teddy bear Desc: The teddy bear she got you for Valentine's Day represents the time when everything was beautiful, before she had changed. It says "Hug me." How you wish you could. But this bear's eyes are dull and lifeless, and its claws are probably used for anything except affection. Str: 4..9 Def: 3..5 HP: 9..17 TP: 5..9 Rank: 3 {Hug} (4) <( # Makes you drop your weapon if wielding one. adjacent. my ($self, $enemy) = @_; my $damage = int($self->g("Str") * 1.5); $damage -= $enemy->g("Equipment.Armour")->rating if $enemy->g("Equipment.Armour"); # Deduct durability from equipment $enemy->g("Equipment.Armour")->diminish if $enemy->g("Equipment.Armour"); if ($damage > 0) { $self->msg("[subj] hugs [1], squeezing away $damage HP.", $enemy); $enemy->take_damage($damage); } else { $self->msg("[subj] hugs [1], but you feel no weaker.", $enemy); } if (my $weapon = $enemy->g("Equipment.Weapon")) { $Game->{Silence} = 1; $enemy->unequip($weapon); $enemy->drop($weapon); $Game->{Silence} = 0; $enemy->msg("[subj] fumble with [1P] [2], dropping it.", $enemy, $weapon); } return 1; )> {Claw} (2) <( # Adjacent my ($self, $enemy) = @_; my $damage = 3 + random(4, $self->g("Str") * 1.5); $damage -= $enemy->g("Equipment.Armour")->rating if $enemy->g("Equipment.Armour"); # Deduct durability from equipment $enemy->g("Equipment.Armour")->diminish if $enemy->g("Equipment.Armour"); if ($damage > 0) { $self->msg("[1P] claw tears into [2], scratching off $damage HP!", $self, $enemy); $enemy->take_damage($damage); return 1; } else { $self->msg("[1P] claw fails to scratch [2].", $self, $enemy); return -1; } )> Symbol: orange B Behavior: <( if TP_lower(2), run() if adjacent() and TP_higher(3), attack(Hug) if adjacent(), attack(Claw) else smart_chase() )> Exp: 6..9 # Rank 2 (Medium) Name: BSOD Desc: You are reminded of your unpleasant days using Windows. This hovering beast is a portal straight into philosophies you don't support. Str: 10..15 Def: 9..15 HP: 30..50 TP: 5..15 Rank: 2 {OpenWindow} (4) <( # Summon code bugs, anywhere my ($self, $enemy) = @_; # How many spaces adjacent to enemy are open? my $map = $enemy->g("Area"); my @spaces = (); foreach my $y ($enemy->{Y} - 1 .. $enemy->{Y} + 1) { foreach my $x ($enemy->{X} - 1 .. $enemy->{X} + 1) { push @spaces, [$y, $x] unless $map->barrier($y, $x) or $map->{Map}[$y][$x]{Char}; } } unless (@spaces) { $self->msg("[subj] fails to open a window."); return -1; } $self->msg("[subj] opens a window to the world of proprietary software."); # How many bugs to summon? foreach (0 .. random(1, $#spaces)) { my ($y, $x) = ( @{ delrand(\@spaces) } ); $Game->{Content}{codebug}->new( Z => $enemy->g("Z"), Y => $y, X => $x ); say "A code bug appears!"; } return 1; )> {Crash} (0) <( # self-destruct, rush to PC. activates when near-dead. my ($self, $enemy) = @_; # Don't worry about GETTING there, y'know? my $damage = $self->g("HP") * $self->g("Str"); $self->msg("[subj] rushes blindly towards [1], self-destructing. Crash!", $enemy); $enemy->take_damage($damage); # BSOD dies, now. $self->die(1); return 1; )> {Freeze} (2) <( # Self-explanatory, adjacent. Damage and paralysis. my ($self, $enemy) = @_; my $damage = roll("$self->{Str}d5+3"); $enemy->react( to => ["Before", "go"], when => 1, by => sub { $enemy->msg("[subj] [are/is] frozen!"); return -1; }, Name => "FROZEN" ); $enemy->delayevent(3, sub { my $enemy = shift; $enemy->msg("[subj] dethaw."); $enemy->eventoff("FROZEN"); }); $self->msg("[subj] freezes [1]!", $enemy); $enemy->take_damage($damage); return 1; )> Symbol: Blue W Behavior: <( if health_low(10) and percent(60), attack(Crash) if TP_lower(2), run() if adjacent(), attack(Freeze) if near(16) and TP_higher(3), attack(OpenWindow) else smart_chase() )> Exp: 15..20 Desc: All you can recall here in this place are bittersweet endings, pointless beginnings, good things dying, and bad things being nurtured. Str: 6..12 Def: 8..14 HP: 25..35 TP: 10..16 Rank: 2 {Reminisce} (4) <( # Print random memory and deduct HP. ne ware. my ($self, $enemy) = @_; my $damage = roll("3d$self->{Str}"); say chooserand( "\"I... I think you're beautiful.\" \"What? Haha, I just fell out of my chair! You probably shouldn't have told me that...\"", "\"I'm serious, if you get attached to me, you'll get hurt.\" \"I don't care, I'll face anything for you.\"", "\"Did you tell him to flirt with you?\" \"You have to be assertive!\"", "\"WOW... Nicole asked me to the dance!!!\"" ); $enemy->take_damage($damage); return 1; )> Symbol: red M Behavior: <( if TP_lower(4), run() if near(12), attack(Reminisce) else smart_chase() )> Exp: 14..17 Name: white rabbit Desc: Hippity-hop, hippity-hop... Just looking at this thing is making you trip. Jefferson Airplane fills your head, distracting you from the Monty Python-style teeth. Whip out the Holy Hand Grena-- Ask Alice how to beat it. But only when she's ten feet tall... Str: 12..16 Def: 10..16 HP: 28..36 TP: 7..19 Rank: 2 {Bite} (7) <( # OW. adjacent my ($self, $enemy) = @_; my $damage = roll("10d3") + max(2, 5, 10); $self->msg("[1P] teeth slice into [2], tearing away $damage HP! It's a mean bunny!", $self, $enemy); $enemy->take_damage($damage); return 1; )> Symbol: White W Behavior: <( if TP_lower(7), run() if adjacent(), attack(Bite) else smart_chase() )> Exp: 17..23 # Rank 1 (Tough) Name: GumbyBrain Desc: Whoa... it's the quote bot from the #perl IRC channel! Its physical manifestation simply cannot be described. Str: 20..26 Def: 20..24 HP: 40..60 TP: 18..24 Rank: 1 {Quote} (9) <( # OW. 5 away. my ($self, $enemy) = @_; my $sy = $self->g("Y"); my $sx = $self->g("X"); my $py = $enemy->g("Y"); my $px = $enemy->g("X"); my $distance = $self->distance($Player); my $damage = int(roll("3d10") / $distance * 2); say chooserand( "18:14 < GumbyBRAIN> In all the humps. You'll see its a monster.", "17:57 < GumbyBRAIN> Having 2 sets of 4, we took 2 of the city line.", "18:19 < merlyn> of course -- but you don't want to do that." ); $self->msg("[1P] profound statement dazes you. Your karma -- er, HP is lowered by $damage", $self, $enemy); $enemy->take_damage($damage); return 1; )> {MarkovChain} (15) <( my ($self, $enemy) = @_; my $damage = max(2, 5, 10) * int(min(4, 5, 10) / 2); $self->msg("[subj] whips you with a Markov Chain (literally), slicing away $damage HP.", $enemy); $enemy->take_damage($damage); return 1; )> Symbol: yellow G Behavior: <( if TP_lower(9), run() if adjacent() and TP_higher(14), attack(MarkovChain) if near(8), attack(Quote) else smart_chase() )> Exp: 20..30 Desc: Why aren't your parents back yet? Why don't your friends reply? What if... Str: 15..25 Def: 17..23 HP: 30..42 TP: 15..25 Rank: 1 {CrownofThorns} (18) <( # Places cursed item on player that deducts HP, steals helmet. adjacent. # dies after. my ($self, $enemy) = @_; # First pwn helmet. if (my $helmet = $enemy->g("Equipment.Helmet")) { # Any helmets in EmotionRL yet? :P $Game->{Silence} = 1; # No curses, hahahaha! $enemy->unequip($helmet); $Game->{Silence} = 0; $self->msg("[subj] incinerates your helmet with a mere glance."); $helmet->destroy; } # Be merciless... my $crown = $Game->{Content}{crownthorns}->new; $Game->{Silence} = 1; $enemy->g("Inv")->add($crown); $enemy->wear($crown); $Game->{Silence} = 0; $self->msg("[subj] mercilessly places a [1] upon [2P] head.", $crown, $enemy); $self->msg("[1P] work here is complete...", $self); $self->die(1); return 1; )> Symbol: Orange H Equipment: needleblade (Weapon) Behavior: <( if TP_lower(18), run() if adjacent(), attack(CrownofThorns) else smart_chase() )> Exp: 30..50