#include <effect.h> #define BLIND "/std/effects/religious/blind" #define CLASS "auriental.punishment.albatross" #define COMBAT "/std/effects/fighting/combat" string query_classification(){ return CLASS; } int query_indefinite(){ return 1; } void damage_player( object pl, int damage ){ if( damage > 0 ) damage = damage * -1; if( pl->adjust_hp( damage ) <= 0 ) pl->attack_by( this_object() ); COMBAT->monitor_points( pl, 1 ); } /* damage_player() */ void pecking( object pl ){ int damage = roll_MdN( 3, 150 ); object room = environment( pl ); if( room->query_property( "location" ) != "outside" ){ if( pl->expected_tt() ) pl->submit_ee( 0, ( pl->expected_tt() + 15 + random( 20 ) ), EE_REMOVE ); tell_object( pl, "The albatrosses pace around the area, glaring at you.\n" ); tell_room( room, "Albatrosses pace underfoot, looking quite upset.\n", pl ); return; } switch( roll_MdN( 2, 3 ) ){ case 2: tell_object( pl, "The albatrosses peck at your eyes, blinding you.\n" ); tell_room( room, "A flock of albatrosses peck at " + pl->the_short() + "'s eyes.\n", ({ pl }) ); damage_player( pl, damage * 3 / 2 ); pl->add_effect( BLIND, damage / 2 ); break; case 3: tell_object( pl, "A lone albatross dive-bombs you, skewering you with its beak.\n" ); tell_room( room, "A single albatross dives at " + pl->the_short() + ", impaling " + pl->query_objective() + " with its beak.\n", ({ pl }) ); damage_player( pl, damage ); break; case 4: tell_room( room, "The albatrosses circle, watching you with cold, beady eyes.\n" ); break; case 5: tell_object( pl, "One of the albatrosses swoops low above you, dropping an oyster " "shell directly on your head.\n" ); tell_room( room, "A large oyster shell drops from the sky, splitting open on " + pl->the_short() + "'s head.\n", ({ pl }) ); damage_player( pl, damage / 2 ); break; default: tell_object( pl, "Several albatrosses land on your shoulders, spearing their beaks " "into you.\n" ); tell_room( room, "Several albatrosses drop onto " + pl->the_short() + "'s shoulders, " "skewering " + pl->query_objective() + " with their beaks before " "taking off again.\n", ({ pl }) ); damage_player( pl, damage * 2 ); break; } } /* pecking() */ int beginning( object pl, int args ){ tell_object( pl, "A flock of albatrosses forms above you. They don't look pleased to see " "you at all.\n" ); tell_room( environment( pl ), "A flock of albatrosses circles above " + pl->the_short() + "\n", ({ pl }) ); pl->submit_ee( "pecking", ({ 15, 45 }), EE_CONTINUOUS, pl ); pl->submit_ee( 0, args, EE_REMOVE ); pl->add_extra_look( this_object() ); return args; } /* beginning() */ int merge_effect( object pl, int old_args, int new_args ){ pl->submit_ee( 0, new_args, EE_REMOVE ); return new_args; } /* merge_effect() */ int restart( object pl, int args ){ tell_object( pl, "The flock of albatrosses returns, apparently not finished with their " "attack.\n" ); tell_room( environment( pl ), "A flock of albatrosses forms above " + pl->the_short() + "\n", ({ pl }) ); pl->add_extra_look( this_object() ); return args; } /* restart() */ void end( object pl, int args ){ tell_room( environment( pl ), "The albatrosses lose interest and slowly fly away, trying to remember " "how to be properly pointless.\n" ); pl->remove_extra_look( this_object() ); } /* end() */ string extra_look( object pl ){ if( environment( pl )->query_property( "location" ) != "outside" ){ return capitalize( pl->query_pronoun() ) + " is surrounded by angry albatrosses.\n"; } return capitalize( pl->query_pronoun() ) + " has an angry flock of albatrosses around " + pl->query_objective() + ".\n"; } /* extra_look() */ string query_death_reason(){ return "being pecked to death by albatrosses"; } /* query_death_reason() */