void death( char_data* victim, char_data* ch, char* dt ) { char tmp [ TWO_LINES ]; obj_data* corpse; content_array* where = victim->array; char_data* rch; bool survive; remove_bit( &victim->status, STAT_BERSERK ); if( ch == NULL ) for( int i = 0; i < *where; i++ ) if( ( rch = character( where->list[i] ) ) != NULL && includes( rch->aggressive, victim ) ) { ch = rch; break; } stop_fight( victim ); clear_queue( victim ); if( !can_die( victim ) ) return; disburse_exp( victim ); register_death( victim, ch, dt ); clear_queue( victim ); death_cry( victim ); if( survive = !die_forever( victim ) ) raw_kill( victim ); corpse = make_corpse( victim, where ); loot_corpse( corpse, ch, victim ); if( survive ) return; if( mob( victim ) != NULL ) { victim->Extract( ); return; } sprintf( tmp, "%s's soul is taken by death.", victim->Name( ) ); info( tmp, LEVEL_BUILDER, tmp, IFLAG_DEATHS, 1, victim ); clear_screen( victim ); reset_screen( victim ); send( victim, "Death is surprisingly peaceful.\n\r" ); send( victim, "Good night.\n\r" ); purge( player( victim ) ); }
ascii_man::ascii_man() { did_move(false); did_collide(false); feels_gravity(true); did_gravity(false); is_fixed(false); isdead(false); can_die(true); initialize(0); }
void ascii_man::collide(object *obj2, float adj, vector2d temp_mv, float x_over, float y_over) { set_hit_object(obj2); if(x_over > y_over) { if(this->get_pt().get_x() < obj2->get_pt().get_x()) {set_hitR(true);} else {set_hitL(true);} } if(x_over < y_over) { if(this->get_pt().get_y() < obj2->get_pt().get_y()) {set_hitD(true);} else {set_hitU(true);} } if (adj < 0.0001) {adj=1;} set_pt(get_pt() + (get_mv()* adj)); set_mv(temp_mv * obj2->get_mass()); if(this->get_mv().get_y() > 0 && get_hitD()==true && obj2->is_fixed()==true) {set_mv(get_mv().get_x(),0);} if (can_die()==true) { set_health(get_health()-obj2->get_damage()); } if (get_health() <= 0) { isdead(true); } did_collide(true); did_move(true); }