Add lesson whispers, teacher catch chance, and after-bell teacher talk.

Whispering cuts lesson skill gain from BehaviorDef; a teacher in the room may interrupt into a discipline circle, and pedagogy scales the pupil's opinion of the teacher.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-20 10:35:31 +03:00
co-authored by Cursor
parent cb869e4977
commit f7d5e0c042
22 changed files with 1061 additions and 36 deletions
@@ -54,6 +54,24 @@
"roles": ["student"],
"weight": 2,
},
{
"defName": "Whisper",
"room": "Classroom",
"minutes": 6,
"need": "Social",
"needGain": 0.15,
"roles": ["student"],
"weight": 2,
},
{
"defName": "TeacherTalk",
"room": "Classroom",
"minutes": 8,
"need": "Social",
"needGain": 0.3,
"roles": ["staff"],
"weight": 0,
},
{
"defName": "WalkCorridor",
"room": "Corridor",
@@ -74,8 +74,18 @@
"talkNoLanguageOpinionMultiplier": 0.15,
"talkPhoneOpinionMultiplier": 0.5,
"talkCommunicationOpinionScale": 0.5,
"talkCircleMin": 2,
"talkCircleMax": 4,
"talkFriendThreshold": 40,
"talkEnemyThreshold": -40,
"talkCircleMin": 2,
"talkCircleMax": 4,
"talkFriendThreshold": 40,
"talkEnemyThreshold": -40,
// Whisper on lesson (slice 9 phase 43). Catch chance is not 1 even with loud traits.
"lessonWhisperSkillFactor": 0.4,
"whisperCatchChance": 0.4,
"whisperCatchMax": 0.85,
"whisperStartChance": 0.12,
"talkPedagogyOpinionScale": 0.4,
"teacherAfterLessonWeight": 4,
"teacherQuestionWeight": 2,
"teacherPraiseWeight": 2,
"teacherReprimandWeight": 1,
}
@@ -3,6 +3,7 @@
"defName": "TopicStudy",
"tags": ["study"],
"roles": ["student", "staff"],
"whisperOnLesson": true,
"opinionShift": 2,
},
{
@@ -10,12 +11,14 @@
"tags": ["games"],
"roles": ["student"],
"age": { "min": 7, "max": 18 },
"whisperOnLesson": true,
"opinionShift": 3,
},
{
"defName": "TopicFood",
"tags": ["food"],
"roles": ["student", "staff"],
"whisperOnLesson": true,
"opinionShift": 2,
},
{
@@ -28,12 +31,14 @@
"defName": "TopicSport",
"tags": ["sport"],
"roles": ["student", "staff"],
"whisperOnLesson": true,
"opinionShift": 3,
},
{
"defName": "TopicGossip",
"tags": ["gossip"],
"roles": ["student", "staff"],
"whisperOnLesson": true,
"opinionShift": 1,
},
{
@@ -47,6 +52,25 @@
"tags": ["appearance"],
"roles": ["student"],
"age": { "min": 11, "max": 18 },
"whisperOnLesson": true,
"opinionShift": 1,
},
{
"defName": "TopicQuestion",
"tags": ["study"],
"roles": ["student", "staff"],
"opinionShift": 2,
},
{
"defName": "TopicPraise",
"tags": ["study"],
"roles": ["student", "staff"],
"opinionShift": 4,
},
{
"defName": "TopicDiscipline",
"tags": ["study"],
"roles": ["student", "staff"],
"opinionShift": -6,
},
]
@@ -35,6 +35,7 @@
"incompatible": ["Leader", "Bully"],
"wageAsk": -8,
"talkInitiative": 0.45,
"whisperCatchMultiplier": 0.55,
},
{
"defName": "Leader",
@@ -42,6 +43,7 @@
"incompatible": ["Quiet"],
"wageAsk": 10,
"talkInitiative": 1.6,
"whisperCatchMultiplier": 1.25,
"skillModifiers": [
{ "skill": "History", "offset": 4 },
],
@@ -107,5 +109,6 @@
"incompatible": ["Quiet"],
"talkInitiative": 1.4,
"talkCircleBonus": 1,
"whisperCatchMultiplier": 1.4,
},
]
@@ -6,6 +6,8 @@
"Chat": "Chat",
"StaffChat": "Staff chat",
"PhoneChat": "Phone chat",
"Whisper": "Whisper",
"TeacherTalk": "Teacher talk",
"WalkCorridor": "Walk the corridor",
"WalkYard": "Walk the yard",
"Behavior": "Behavior rules",
@@ -194,6 +196,8 @@
"ActionStarted": "started: {0}",
"ActionEnded": "finished: {0}",
"TalkEnded": "talked about {0}",
"Whispered": "whispered",
"TeacherInterrupted": "the teacher cut them off",
"TopicStudy": "schoolwork",
"TopicGames": "games",
"TopicFood": "food",
@@ -202,6 +206,9 @@
"TopicGossip": "gossip",
"TopicRude": "rough talk",
"TopicAppearance": "looks",
"TopicQuestion": "a subject question",
"TopicPraise": "praise",
"TopicDiscipline": "discipline",
"ApparelReplaced": "got a new {0}",
"ApparelChanged": "changed clothes: {0}",
"LessonNoTeacher": "lesson without a teacher: {0}",
@@ -6,6 +6,8 @@
"Chat": "Разговор",
"StaffChat": "Разговор в учительской",
"PhoneChat": "Разговор по телефону",
"Whisper": "Шёпот",
"TeacherTalk": "Разговор учителя",
"WalkCorridor": "Прогулка по коридору",
"WalkYard": "Прогулка во дворе",
"Behavior": "Правила поведения",
@@ -194,6 +196,8 @@
"ActionStarted": "начал: {0}",
"ActionEnded": "закончил: {0}",
"TalkEnded": "говорил о {0}",
"Whispered": "шептались",
"TeacherInterrupted": "учитель оборвал",
"TopicStudy": "учёбе",
"TopicGames": "играх",
"TopicFood": "еде",
@@ -202,6 +206,9 @@
"TopicGossip": "сплетнях",
"TopicRude": "грубом",
"TopicAppearance": "внешности",
"TopicQuestion": "вопросе по предмету",
"TopicPraise": "похвале",
"TopicDiscipline": "дисциплине",
"ApparelReplaced": "получил новую {0}",
"ApparelChanged": "переоделся: {0}",
"LessonNoTeacher": "урок без учителя: {0}",