protected function adaptive_mark_details_from_step(question_attempt_step $gradedstep, question_state $state, $maxmark, $penalty) { if (!isset($this->question->penaltyregime) || $this->question->penaltyregime === '') { $details = parent::adaptive_mark_details_from_step($gradedstep, $state, $maxmark, $penalty); } else { $prevtries = $this->qa->get_last_behaviour_var('_try', 0); $fract = $this->adjusted_fraction(1.0, $prevtries); $details = new qbehaviour_adaptive_mark_details($state); $details->maxmark = $maxmark; $details->actualmark = $gradedstep->get_fraction() * $details->maxmark; $details->rawmark = $gradedstep->get_behaviour_var('_rawfraction') * $details->maxmark; $details->totalpenalty = 1.0 - $fract; $details->currentpenalty = $details->totalpenalty * $details->maxmark; $details->improvable = $this->is_state_improvable($gradedstep->get_state()); } return $details; }