#! perl # archetype nekosan use Data::Dumper; sub teleport { my ($pl, $map, $x, $y) = @_; my $portal = cf::object::new ("exit"); $portal->set_slaying ($map); $portal->set_hp ($x); $portal->set_sp ($y); $portal->apply ($pl); $portal->free; } sub on_move { my ($data) = @_; if (my $pl = $data->{who}->nearest_player) { my (undef, undef, undef, $dir, undef) = $data->{who}->rangevector ($pl); $data->{who}->move ($dir); } 1 } sub on_attack { my ($data) = @_; $data->{activator}{neko_attack}++ or cf::LOG cf::llevDebug, sprintf "QBERT Neko-san was attacked by %s!\n", $data->{activator}->name; $data->{activator}->message ("Meoow! (Please do not hurt me)") if !($data->{activator}{neko_attack} & 15); if ($data->{activator}{neko_attack} > 512) { $data->{activator}{neko_attack} -= 128; $data->{activator}->message ("Neko-san is suddenly gone!"); teleport $data->{activator}, "/scorn/misc/scorn_illusions", 15, 7; $data->{activator}->message ("You hear strange noises all around you..."); $data->{activator}->message ("You feel dumb."); } 1 } sub on_say { my ($data) = @_; cf::LOG cf::llevDebug, sprintf "QBERT [Neko-fon] %s: %s\n", $data->{activator}->name, $data->{message}; 0 }