Skip to main content

B1SchoolEvaluationData

A single student's overall evaluation state.
* Stored as a value in FB2School::StudentEvaluationMap.

Data sections:
* 1) Weekly accumulation - DailyRecords[5]. Reset every Monday in OnWeekReset.
* The exam-preparation accumulator (ExamPreparation) has been split out into FB2CareerComponent and is managed as per-student ability data (2026-05).
* 2) Weekly result history - WeeklyHistory[]. Only keeps up to DA->MaxWeeklyHistoryCount weeks; the oldest entries are removed first when exceeded.
* 3) Persistent state - bHadCounseling, bHadExamThisCareer. Never reset.

PropertyTypeDescriptionMetadata
DailyRecordsTArrayIndex = (EB1DayOfWeek - Monday). Fixed at 5 slots (Monday-Friday).
* Guaranteed by SetNum(5) in OnPostInit/OnWeekReset.
LastExamScoreMorningint32This week's per-slot exam score (each 020, max score ExamMaxScore/2).
* Computed independently per slot; ExamScore = Morning + Afternoon (0
40).
* Computed by RunExamSlot at the time of taking the exam; untaken slots remain 0.
* Reset to 0 on week transition (OnWeekReset).
*
* Note: The exam-preparation accumulator (ExamPreparation) has been classified as per-student
* ability data and moved to FB2CareerComponent (2026-05). RunExamSlot reads the prep value from the student's CareerComponent to compute the score.
LastExamScoreAfternoonint32This week's afternoon exam slot score (0~20); 0 if the slot was not taken.
WeeklyHistoryTArrayResults for the most recent N weeks (per-category scores + total score + grade). Used for the UI graph/trend display and debugging.
* The retention limit is DA->MaxWeeklyHistoryCount (recommended 4); when exceeded, the oldest entry is removed first via RemoveAt(0).
* The first element is the oldest week, and the last element is the most recent week.
* Each entry's WeekIndex is a continuous number since school enrollment (1, 2, 3, ...) - the numbering is preserved even when trimmed.
CurrentGradeEB1SchoolGradeA cache kept in sync whenever WeeklyHistory is updated. For frequent lookups (UI/Script).
PreviousGradeEB1SchoolGradeThe grade from the prior week, cached for comparison/trend display.
bHadCounselingboolWhether the student has ever received counseling at least once. Used as an early-graduation condition (must be false).
bHadExamThisCareerboolTrue once the first weekly evaluation has been determined (either by taking an exam or by a week closing without one) or after a transferred grade is applied. A flag marking the exit from the "pre-evaluation" state.
* Set by: RunExamSlot / FinalizeWeeklyEvaluation / ApplyTransferredGrade.
bAttendedMorningExamboolWhether the exam slot was taken this week, per slot. The corresponding slot is marked true when RunExamSlot runs for it.
* An untaken slot (false) keeps LastExamScore*=0 -> contributes 0 to the sum (no ExamFloorScore guarantee).
* Also used to guarantee idempotency - if RunExamSlot is called again for an already-taken slot, it is skipped.
* Reset to false in OnWeekReset.
bAttendedAfternoonExamboolWhether the afternoon exam slot was taken this week; reset to false on week reset.
bHasEverAttendedboolWhether the student has ever actually attended; marked true on the first attended day.
* Used as a one-time trigger to treat the first day's empty homework slot as submitted.
PromPartnerVisitIdsTArrayUnique PromPartner EntityIds that successfully attended prom with this student.
* Used by the VisitPromWithPartner script condition.
bWeeklyFinalizedboolWhether this week's closing has been completed. Guarantees idempotency for FinalizeWeeklyEvaluation.
* Reset to false in OnWeekReset, set to true at the end of FinalizeWeeklyEvaluation.
* Also used to prevent duplicate closing during batch closing on exam-day holidays.