Random Events

This commit is contained in:
James
2025-12-01 12:00:00 -07:00
parent fec050a3c1
commit cfb0d01ebd
28 changed files with 262 additions and 15 deletions
+103
View File
@@ -1179,6 +1179,109 @@ FROGPILOT_EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
AlertStatus.critical, AlertSize.mid,
Priority.HIGHEST, VisualAlert.none, AudibleAlert.prompt, .1),
},
# Random Events
FrogPilotEventName.accel30: {
ET.WARNING: Alert(
"UwU u went a bit fast there!",
"(⁄ ⁄•⁄ω⁄•⁄ ⁄)",
FrogPilotAlertStatus.frogpilot, AlertSize.mid,
Priority.LOW, VisualAlert.none, FrogPilotAudibleAlert.uwu, 4.),
},
FrogPilotEventName.accel35: {
ET.WARNING: Alert(
"I ain't giving you no tree-fiddy",
"You damn Loch Ness Monsta!",
FrogPilotAlertStatus.frogpilot, AlertSize.mid,
Priority.LOW, VisualAlert.none, FrogPilotAudibleAlert.nessie, 4.),
},
FrogPilotEventName.accel40: {
ET.WARNING: Alert(
"Great Scott!",
"🚗💨",
FrogPilotAlertStatus.frogpilot, AlertSize.mid,
Priority.LOW, VisualAlert.none, FrogPilotAudibleAlert.doc, 4.),
},
FrogPilotEventName.dejaVuCurve: {
ET.PERMANENT: Alert(
"♬♪ Deja vu! ᕕ(⌐■_■)ᕗ ♪♬",
"🏎️",
FrogPilotAlertStatus.frogpilot, AlertSize.mid,
Priority.LOW, VisualAlert.none, FrogPilotAudibleAlert.dejaVu, 4.),
},
FrogPilotEventName.firefoxSteerSaturated: {
ET.WARNING: Alert(
"IE Has Stopped Responding...",
"Turn Exceeds Steering Limit",
AlertStatus.userPrompt, AlertSize.mid,
Priority.LOW, VisualAlert.steerRequired, FrogPilotAudibleAlert.firefox, 4.),
},
FrogPilotEventName.hal9000: {
ET.WARNING: Alert(
"I'm sorry Dave",
"I'm afraid I can't do that...",
AlertStatus.normal, AlertSize.mid,
Priority.HIGH, VisualAlert.none, FrogPilotAudibleAlert.hal9000, 4.),
},
FrogPilotEventName.openpilotCrashedRandomEvent: {
ET.IMMEDIATE_DISABLE: Alert(
"openpilot crashed 💩",
"Please post the 'Error Log' in the FrogPilot Discord!",
AlertStatus.normal, AlertSize.mid,
Priority.HIGHEST, VisualAlert.none, FrogPilotAudibleAlert.fart, 10.),
ET.NO_ENTRY: Alert(
"openpilot crashed 💩",
"Please post the 'Error Log' in the FrogPilot Discord!",
AlertStatus.normal, AlertSize.mid,
Priority.HIGHEST, VisualAlert.none, FrogPilotAudibleAlert.fart, 10.),
},
FrogPilotEventName.thisIsFineSteerSaturated: {
ET.WARNING: Alert(
"This is fine ☕",
"Turn Exceeds Steering Limit",
AlertStatus.userPrompt, AlertSize.mid,
Priority.LOW, VisualAlert.steerRequired, FrogPilotAudibleAlert.thisIsFine, 2.),
},
FrogPilotEventName.toBeContinued: {
ET.PERMANENT: Alert(
"To be continued...",
"⬅️",
FrogPilotAlertStatus.frogpilot, AlertSize.mid,
Priority.MID, VisualAlert.none, FrogPilotAudibleAlert.continued, 7.),
},
FrogPilotEventName.vCruise69: {
ET.WARNING: Alert(
"Lol 69",
"",
FrogPilotAlertStatus.frogpilot, AlertSize.small,
Priority.LOW, VisualAlert.none, FrogPilotAudibleAlert.noice, 2.),
},
FrogPilotEventName.yourFrogTriedToKillMe: {
ET.PERMANENT: Alert(
"Your Frog tried to kill me...",
"👺",
FrogPilotAlertStatus.frogpilot, AlertSize.mid,
Priority.MID, VisualAlert.none, FrogPilotAudibleAlert.angry, 5.),
},
FrogPilotEventName.youveGotMail: {
ET.WARNING: Alert(
"You've got mail! 📧",
"",
FrogPilotAlertStatus.frogpilot, AlertSize.small,
Priority.LOW, VisualAlert.none, FrogPilotAudibleAlert.mail, 3.),
},
}
+13 -5
View File
@@ -38,11 +38,19 @@ OnroadAlerts::Alert OnroadAlerts::getAlert(const SubMaster &sm, const SubMaster
Alert a = {};
static QString crash_log_path = "/data/error_logs/error.txt";
if (QFile::exists(crash_log_path)) {
a = {tr("openpilot crashed"),
tr("Please post the \"Error Log\" in the FrogPilot Discord!"),
"openpilotCrashed",
cereal::SelfdriveState::AlertSize::MID,
cereal::SelfdriveState::AlertStatus::CRITICAL};
if (frogpilot_toggles.value("random_events").toBool()) {
a = {tr("openpilot crashed 💩"),
tr("Please post the \"Error Log\" in the FrogPilot Discord!"),
"openpilotCrashedRandomEvent",
cereal::SelfdriveState::AlertSize::MID,
cereal::SelfdriveState::AlertStatus::CRITICAL};
} else {
a = {tr("openpilot crashed"),
tr("Please post the \"Error Log\" in the FrogPilot Discord!"),
"openpilotCrashed",
cereal::SelfdriveState::AlertSize::MID,
cereal::SelfdriveState::AlertStatus::CRITICAL};
}
return a;
} else if (selfdrive_frame >= started_frame) { // Don't get old alert.
a = {ss.getAlertText1().cStr(), ss.getAlertText2().cStr(),
+5
View File
@@ -54,6 +54,11 @@ void ExperimentalButton::updateState(const UIState &s, const FrogPilotUIState &f
const cereal::CarState::Reader &carState = (*s.sm)["carState"].getCarState();
updateBackgroundColor();
if (params_memory.getBool("UpdateWheelImage")) {
updateTheme();
params_memory.remove("UpdateWheelImage");
}
}
void ExperimentalButton::paintEvent(QPaintEvent *event) {
+19 -2
View File
@@ -16,7 +16,7 @@ from openpilot.common.swaglog import cloudlog
from openpilot.system import micd
from openpilot.system.hardware import HARDWARE
from openpilot.frogpilot.common.frogpilot_variables import ACTIVE_THEME_PATH, ERROR_LOGS_PATH, get_frogpilot_toggles
from openpilot.frogpilot.common.frogpilot_variables import ACTIVE_THEME_PATH, ERROR_LOGS_PATH, RANDOM_EVENTS_PATH, get_frogpilot_toggles
SAMPLE_RATE = 48000
SAMPLE_BUFFER = 4096 # (approx 100ms)
@@ -52,7 +52,20 @@ sound_list: dict[int, tuple[str, int | None, float]] = {
AudibleAlert.warningImmediate: ("warning_immediate.wav", None, MAX_VOLUME),
# FrogPilot variables
FrogPilotAudibleAlert.angry: ("angry.wav", 1, MAX_VOLUME),
FrogPilotAudibleAlert.continued: ("continued.wav", 1, MAX_VOLUME),
FrogPilotAudibleAlert.dejaVu: ("dejaVu.wav", 1, MAX_VOLUME),
FrogPilotAudibleAlert.doc: ("doc.wav", 1, MAX_VOLUME),
FrogPilotAudibleAlert.fart: ("fart.wav", 1, MAX_VOLUME),
FrogPilotAudibleAlert.firefox: ("firefox.wav", 1, MAX_VOLUME),
FrogPilotAudibleAlert.goat: ("goat.wav", None, MAX_VOLUME),
FrogPilotAudibleAlert.hal9000: ("hal9000.wav", 1, MAX_VOLUME),
FrogPilotAudibleAlert.mail: ("mail.wav", 1, MAX_VOLUME),
FrogPilotAudibleAlert.nessie: ("nessie.wav", 1, MAX_VOLUME),
FrogPilotAudibleAlert.noice: ("noice.wav", 1, MAX_VOLUME),
FrogPilotAudibleAlert.startup: ("startup.wav", 1, MAX_VOLUME),
FrogPilotAudibleAlert.thisIsFine: ("this_is_fine.wav", 1, MAX_VOLUME),
FrogPilotAudibleAlert.uwu: ("uwu.wav", 1, MAX_VOLUME),
}
if HARDWARE.get_device_type() in ("tici", "tizi"):
sound_list.update({
@@ -92,6 +105,7 @@ class Soundd:
self.previous_sound_pack = None
self.error_log = ERROR_LOGS_PATH / "error.txt"
self.random_events_directory = RANDOM_EVENTS_PATH / "sounds"
self.update_frogpilot_sounds()
@@ -102,6 +116,7 @@ class Soundd:
for sound in sound_list:
filename, play_count, volume = sound_list[sound]
random_events_path = self.random_events_directory / filename
sounds_path = self.sound_directory / filename
if not sounds_path.exists() and "_tizi" in filename:
@@ -109,7 +124,9 @@ class Soundd:
if standard_path.exists():
sounds_path = standard_path
if sounds_path.exists():
if random_events_path.exists():
wavefile = wave.open(str(random_events_path), 'r')
elif sounds_path.exists():
wavefile = wave.open(str(sounds_path), 'r')
else:
if filename == "startup.wav":