/** * This effect has a classification * of "pie.cream". * <p> * @author Wonko * @classification pie.cream * @see help::effects */ #include <effect.h> #include <obj_parser.h> #define TO this_object() #define AUDIENCE environment( player ) #define PLYRNAME player->the_short() #define PLYRPRON player->query_pronoun() #define PLYRPOSS player->query_possessive() #define PLYROBJE player->query_objective() /** @ignore yes */ string query_classification() { return "pie.cream"; } /** @ignore yes */ void beginning( object player, int time ) { // player->submit_ee( "start_mess", 2, EE_ONCE ); player->submit_ee( "rand_mess", ({ 35, 50 }), EE_CONTINUOUS ); player->submit_ee( "lick_check", ({ 15, 30 }), EE_CONTINUOUS ); player->submit_ee( 0, time, EE_REMOVE ); player->add_extra_look( TO ); } /* beginning() */ /** @ignore yes */ int merge_effect( object player, int time1, int time2 ) { int newtime; newtime = time2 + player->expected_tt(); if( newtime > 900 ) newtime = 900; if( newtime < 0 ) newtime = 0; player->submit_ee( 0, newtime, EE_REMOVE ); return newtime; } /* merge_effect() */ /** @ignore yes */ void start_mess( object player ) { tell_object( player, "Sugary cream and crumbs begin to slowly slither " "down your face.\n" ); tell_room( AUDIENCE, "Sugary cream begins to slide gracelessly down " + PLYRNAME + "'s face.\n", player ); } /* start_mess() */ void restart( object player ) { player->add_extra_look( TO ); } /* restart() */ /** @ignore yes */ void end( object player, int time ) { if( !player->query_property( "dead" ) ) tell_object( player, "You are finally freed of cream and crumb bits.\n" ); player->remove_extra_look( TO ); } /* end() */ /** @ignore yes */ void rand_mess( object player ) { switch( random( 8 ) ) { case 0 : tell_object( player, "You watch a dollop of cream slide down your " "nose.\n" ); tell_room( AUDIENCE, PLYRNAME + " goes cross-eyed as " + PLYRPRON + " watches a blob of cream slide down " + PLYRPOSS + " nose.\n", player ); break; case 1 : tell_object( player, "You feel a piece of cream slide over your eye, " "so you wipe it off.\n"); tell_room( AUDIENCE, PLYRNAME + " wipes off a piece of cream that " "slides down over " + PLYRPOSS + " eye.\n", player ); break; case 2 : tell_object( player, "Cream oozes into one of your ears.\n" ); tell_room( AUDIENCE, PLYRNAME + " squirms uncomfortably as cream " "oozes into " + PLYRPOSS + " ears.\n", player ); break; case 3 : tell_object( player, "You feel a little like a birthday cake.\n" ); tell_room( AUDIENCE, PLYRNAME + "'s brow furrows in a bout of " "introspection.\n", player ); break; case 4 : tell_object( player, "Warm, melting cream trickles down your " "spine.\n" ); tell_room( AUDIENCE, PLYRNAME + " shudders as warm cream runs down " + PLYRPOSS + " back.\n", player ); break; case 5 : tell_object( player, "A blob of cream falls off you, landing with a " "\"plut!\" sound.\n" ); tell_room( AUDIENCE, "A dollop of cream drops from " + PLYRNAME + " onto the ground.\n", player ); break; case 6 : tell_object(player, "You wipe some cream off your hands and throw it " "on the ground.\n"); tell_room(environment(player), player->short() + " wipes some cream off " + player->query_possessive() + " hands and throws it on the " "ground.\n", player); break; default : tell_object( player, "You know it will take ages to wash this cream " "out of your hair.\n" ); tell_room( AUDIENCE, PLYRNAME + " brushes some crumbs from " + PLYRPOSS + " hair.\n", player ); break; } } /* rand_mess() */ /** @ignore yes */ void lick_check( object player ) { object *creamlovers; object licker; creamlovers = match_objects_for_existence( "dogs, cats, fruitbats", ({ environment( player ) }) ); creamlovers -= ({ player }); if( sizeof( creamlovers ) ) { licker = creamlovers[random( sizeof( creamlovers ) )]; switch( random( 3 ) ) { case 0 : licker->do_command( ":joyfully licks some cream off " + PLYRNAME + "." ); break; case 1 : licker->do_command( ":skillfully fields a large dollop of " "cream as it falls off " + PLYRNAME + "." ); break; default : licker->do_command( ":greedily slurps at the cream sliding " "off " + PLYRNAME + "." ); } TO->merge_effect( player, 0, -( 20 + random( 11 ) ) ); return; } } /* lick_check() */ /** @ignore yes */ string extra_look( object player ) { int *enums; enums = player->effects_matching( "pie.cream" ); if ( !sizeof( enums ) ) return ""; switch( player->expected_tt( 1, enums[ 0 ] ) ) { case 0..60 : return capitalize( PLYRPRON + " has a little bit of cream and a few " "crumbs on " + PLYRPOSS + " face.\n" ); case 61..120 : return capitalize( PLYRPOSS + " face is smeared with creamy biscuit " "crumbs.\n" ); case 121..200 : return capitalize( PLYRPRON + " looks to have taken a cream pie in " "the face.\n" ); case 201..380 : return capitalize( PLYRPOSS + " head and shoulders are covered in " "mounds of cream and biscuit crumbs.\n" ); case 381..560 : return capitalize( PLYRPRON + " has the contents of several cream " "pies splattered all over " + PLYROBJE + ".\n" ); case 561..740 : return capitalize( PLYRPRON + " is barely recognisable under the " "thick layer of sugary, sticky cream covering " + PLYROBJE + ".\n" ); default : return capitalize( PLYRPRON + " is covered in so much sticky cream " "and crumbs, " + PLYRPRON + " resembles a giant cake.\n" ); } }/* end query_extra_look() */