aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Attorney_Online.pro4
-rw-r--r--include/aoapplication.h7
-rw-r--r--include/aooptionsdialog.h2
-rw-r--r--include/aoscene.h1
-rw-r--r--include/courtroom.h13
-rw-r--r--src/aooptionsdialog.cpp14
-rw-r--r--src/aoscene.cpp65
-rw-r--r--src/packet_distribution.cpp42
-rw-r--r--src/text_file_functions.cpp23
9 files changed, 130 insertions, 41 deletions
diff --git a/Attorney_Online.pro b/Attorney_Online.pro
index 32781a1b..b7476190 100644
--- a/Attorney_Online.pro
+++ b/Attorney_Online.pro
@@ -16,13 +16,13 @@ HEADERS += $$files($$PWD/include/*.h)
LIBS += -L$$PWD/lib
-#DEFINES += DISCORD
+DEFINES += DISCORD
contains(DEFINES, DISCORD) {
LIBS += -ldiscord-rpc
}
-#DEFINES += BASSAUDIO
+DEFINES += BASSAUDIO
contains(DEFINES, BASSAUDIO) {
LIBS += -lbass
diff --git a/include/aoapplication.h b/include/aoapplication.h
index 5475eb7b..4a3c669b 100644
--- a/include/aoapplication.h
+++ b/include/aoapplication.h
@@ -144,12 +144,15 @@ public:
//Returns the value of ooc_name in config.ini
QString get_ooc_name();
- //Returns the blip rate from config.ini
+ //Returns the blip rate from config.ini (once per X symbols)
int read_blip_rate();
//Returns true if blank blips is enabled in config.ini and false otherwise
bool get_blank_blip();
+ //Returns true if stop music on objection is enabled in the config.ini
+ bool objection_stop_music();
+
//Returns the value of default_music in config.ini
int get_default_music();
@@ -219,7 +222,7 @@ public:
//Figure out if we can opus this or if we should fall back to wav
QString get_sfx_suffix(QString sound_to_check);
- // Can we use APNG for this? If not, fall back to a gif.
+ // Can we use APNG for this? If not, WEBP? If not, GIF? If not, fall back to PNG.
QString get_image_suffix(QString path_to_check);
//Returns the value of p_search_line within target_tag and terminator_tag
diff --git a/include/aooptionsdialog.h b/include/aooptionsdialog.h
index 934d2577..34ae2b77 100644
--- a/include/aooptionsdialog.h
+++ b/include/aooptionsdialog.h
@@ -88,6 +88,8 @@ private:
QLabel *ui_bliprate_lbl;
QCheckBox *ui_blank_blips_cb;
QLabel *ui_blank_blips_lbl;
+ QLabel *ui_objectmusic_lbl;
+ QCheckBox *ui_objectmusic_cb;
QDialogButtonBox *ui_settings_buttons;
QWidget *ui_casing_tab;
diff --git a/include/aoscene.h b/include/aoscene.h
index b58c0fd0..ddbefe08 100644
--- a/include/aoscene.h
+++ b/include/aoscene.h
@@ -21,6 +21,7 @@ private:
QWidget *m_parent;
QMovie *m_movie;
AOApplication *ao_app;
+ QString last_image;
};
diff --git a/include/courtroom.h b/include/courtroom.h
index fe870b46..b3303374 100644
--- a/include/courtroom.h
+++ b/include/courtroom.h
@@ -64,6 +64,8 @@ public:
void append_evidence(evi_type p_evi){evidence_list.append(p_evi);}
void append_music(QString f_music){music_list.append(f_music);}
void append_area(QString f_area){area_list.append(f_area);}
+ void clear_music(){music_list.clear();}
+ void clear_areas(){area_list.clear();}
void fix_last_area()
{
@@ -247,7 +249,7 @@ private:
bool message_is_centered = false;
int current_display_speed = 3;
- int message_display_speed[7] = {30, 40, 50, 60, 75, 100, 120};
+ int message_display_speed[7] = {10, 20, 30, 40, 50, 60, 75};
// This is for checking if the character should start talking again
// when an inline blue text ends.
@@ -309,6 +311,15 @@ private:
//every time point in char.inis times this equals the final time
const int time_mod = 40;
+ //the amount of time non-animated objection/hold it/takethat images stay onscreen for in ms
+ const int shout_stay_time = 724;
+
+ //the amount of time non-animated guilty/not guilty images stay onscreen for in ms
+ const int verdict_stay_time = 3000;
+
+ //the amount of time non-animated witness testimony/cross-examination images stay onscreen for in ms
+ const int wtce_stay_time = 1500;
+
static const int chatmessage_size = 23;
QString m_chatmessage[chatmessage_size];
bool chatmessage_is_empty = false;
diff --git a/src/aooptionsdialog.cpp b/src/aooptionsdialog.cpp
index 82507a1f..a918c0c9 100644
--- a/src/aooptionsdialog.cpp
+++ b/src/aooptionsdialog.cpp
@@ -319,6 +319,8 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_bliprate_spinbox = new QSpinBox(ui_audio_widget);
ui_bliprate_spinbox->setValue(p_ao_app->read_blip_rate());
ui_bliprate_spinbox->setMinimum(1);
+ ui_bliprate_spinbox->setToolTip(tr("Play a blip sound \"once per every X symbols\", where "
+ "X is the blip rate."));
ui_audio_layout->setWidget(6, QFormLayout::FieldRole, ui_bliprate_spinbox);
@@ -334,6 +336,17 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_audio_layout->setWidget(7, QFormLayout::FieldRole, ui_blank_blips_cb);
+ ui_objectmusic_lbl = new QLabel(ui_audio_widget);
+ ui_objectmusic_lbl->setText(tr("Kill Music On Objection:"));
+ ui_objectmusic_lbl->setToolTip(tr("If true, the game will stop music when someone objects, like in the actual games."));
+
+ ui_audio_layout->setWidget(9, QFormLayout::LabelRole, ui_objectmusic_lbl);
+
+ ui_objectmusic_cb = new QCheckBox(ui_audio_widget);
+ ui_objectmusic_cb->setChecked(p_ao_app->objection_stop_music());
+
+ ui_audio_layout->setWidget(9, QFormLayout::FieldRole, ui_objectmusic_cb);
+
// The casing tab!
ui_casing_tab = new QWidget();
ui_settings_tabs->addTab(ui_casing_tab, tr("Casing"));
@@ -506,6 +519,7 @@ void AOOptionsDialog::save_pressed()
configini->setValue("default_blip", ui_blips_volume_spinbox->value());
configini->setValue("blip_rate", ui_bliprate_spinbox->value());
configini->setValue("blank_blip", ui_blank_blips_cb->isChecked());
+ configini->setValue("objection_stop_music", ui_objectmusic_cb->isChecked());
configini->setValue("casing_enabled", ui_casing_enabled_cb->isChecked());
configini->setValue("casing_defence_enabled", ui_casing_def_cb->isChecked());
diff --git a/src/aoscene.cpp b/src/aoscene.cpp
index 344522b6..c9314258 100644
--- a/src/aoscene.cpp
+++ b/src/aoscene.cpp
@@ -7,16 +7,17 @@ AOScene::AOScene(QWidget *parent, AOApplication *p_ao_app) : QLabel(parent)
m_parent = parent;
ao_app = p_ao_app;
m_movie = new QMovie(this);
+ last_image = "";
}
void AOScene::set_image(QString p_image)
{
- QString background_path = ao_app->get_background_path(p_image + ".png");
- QString animated_background_path = ao_app->get_background_path(p_image + ".gif");
- QString default_path = ao_app->get_default_background_path(p_image + ".png");
+ QString background_path = ao_app->get_image_suffix(ao_app->get_background_path(p_image));
+ if (!file_exists(background_path))
+ background_path = ao_app->get_image_suffix(ao_app->get_default_background_path(p_image)); //Default path
- QPixmap background(background_path);
- QPixmap default_bg(default_path);
+ if (file_exists(background_path) && background_path == last_image)
+ return;
int w = this->width();
int h = this->height();
@@ -25,7 +26,7 @@ void AOScene::set_image(QString p_image)
this->setMovie(nullptr);
m_movie->stop();
- m_movie->setFileName(animated_background_path);
+ m_movie->setFileName(background_path);
m_movie->setScaledSize(QSize(w, h));
if (m_movie->isValid())
@@ -33,44 +34,52 @@ void AOScene::set_image(QString p_image)
this->setMovie(m_movie);
m_movie->start();
}
- else if (file_exists(background_path))
- {
- this->setPixmap(background.scaled(w, h));
- }
else
{
- this->setPixmap(default_bg.scaled(w, h));
+ QPixmap background(background_path);
+ this->setPixmap(background.scaled(w, h));
}
+ last_image = background_path;
}
void AOScene::set_legacy_desk(QString p_image)
{
- //vanilla desks vary in both width and height. in order to make that work with viewport rescaling,
- //some INTENSE math is needed.
- QString desk_path = ao_app->get_background_path(p_image);
- QString default_path = ao_app->get_default_background_path(p_image);
+ QString desk_path = ao_app->get_image_suffix(ao_app->get_background_path(p_image));
+ if (!file_exists(desk_path))
+ desk_path = ao_app->get_image_suffix(ao_app->get_default_background_path(p_image)); //Default path
- QPixmap f_desk;
+ if (file_exists(desk_path) && desk_path == last_image)
+ return;
- if (file_exists(desk_path))
- f_desk.load(desk_path);
- else
- f_desk.load(default_path);
+ QPixmap f_desk(desk_path);
+ //vanilla desks vary in both width and height. in order to make that work with viewport rescaling,
+ //some INTENSE math is needed.
int vp_width = m_parent->width();
int vp_height = m_parent->height();
- //double y_modifier = 147 / 192;
- //double w_modifier = vp_width / 256;
double h_modifier = vp_height / 192;
- //int final_y = y_modifier * vp_height;
- //int final_w = w_modifier * f_desk.width();
int final_h = static_cast<int>(h_modifier * f_desk.height());
- //this->resize(final_w, final_h);
- //this->setPixmap(f_desk.scaled(final_w, final_h));
- this->resize(vp_width, final_h);
- this->setPixmap(f_desk.scaled(vp_width, final_h));
+ this->clear();
+ this->setMovie(nullptr);
+
+ m_movie->stop();
+ m_movie->setFileName(desk_path);
+
+ m_movie->setScaledSize(QSize(vp_width, final_h));
+
+ if (m_movie->isValid())
+ {
+ this->setMovie(m_movie);
+ m_movie->start();
+ }
+ else
+ {
+ this->resize(vp_width, final_h);
+ this->setPixmap(f_desk.scaled(vp_width, final_h));
+ }
+ last_image = desk_path;
}
diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp
index 40015fda..cfd6d8c6 100644
--- a/src/packet_distribution.cpp
+++ b/src/packet_distribution.cpp
@@ -525,6 +525,48 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
send_server_packet(new AOPacket("RD#%"));
}
+ else if (header == "FM")
+ {
+ if (!courtroom_constructed)
+ goto end;
+
+ w_courtroom->clear_music();
+ w_courtroom->clear_areas();
+
+ bool musics_time = false;
+ int areas = 0;
+
+ for (int n_element = 0 ; n_element < f_contents.size() ; ++n_element)
+ {
+ if (musics_time)
+ {
+ w_courtroom->append_music(f_contents.at(n_element));
+ }
+ else
+ {
+ if (f_contents.at(n_element).endsWith(".wav") ||
+ f_contents.at(n_element).endsWith(".mp3") ||
+ f_contents.at(n_element).endsWith(".mp4") ||
+ f_contents.at(n_element).endsWith(".ogg") ||
+ f_contents.at(n_element).endsWith(".opus"))
+ {
+ musics_time = true;
+ w_courtroom->fix_last_area();
+ w_courtroom->append_music(f_contents.at(n_element));
+ areas--;
+// qDebug() << "wtf!!" << f_contents.at(n_element);
+ }
+ else
+ {
+ w_courtroom->append_area(f_contents.at(n_element));
+ areas++;
+ }
+ }
+ }
+
+ w_courtroom->list_music();
+ w_courtroom->list_areas();
+ }
else if (header == "DONE")
{
if (!courtroom_constructed)
diff --git a/src/text_file_functions.cpp b/src/text_file_functions.cpp
index 8f6ee236..9a0cd2fe 100644
--- a/src/text_file_functions.cpp
+++ b/src/text_file_functions.cpp
@@ -8,7 +8,7 @@ QString AOApplication::read_theme()
int AOApplication::read_blip_rate()
{
- int result = configini->value("blip_rate", 1).toInt();
+ int result = configini->value("blip_rate", 2).toInt();
if (result < 1)
return 1;
@@ -48,7 +48,7 @@ int AOApplication::get_max_log_size()
bool AOApplication::get_log_goes_downwards()
{
- QString result = configini->value("log_goes_downwards", "false").value<QString>();
+ QString result = configini->value("log_goes_downwards", "true").value<QString>();
return result.startsWith("true");
}
@@ -385,12 +385,13 @@ QString AOApplication::get_sfx_suffix(QString sound_to_check)
QString AOApplication::get_image_suffix(QString path_to_check)
{
- QString apng_check = path_to_check + ".apng";
- if (file_exists(apng_check))
- {
- return apng_check;
- }
- return path_to_check + ".gif";
+ if (file_exists(path_to_check + ".webp"))
+ return path_to_check + ".webp";
+ if (file_exists(path_to_check + ".apng"))
+ return path_to_check + ".apng";
+ if (file_exists(path_to_check + ".gif"))
+ return path_to_check + ".gif";
+ return path_to_check + ".png";
}
@@ -601,6 +602,12 @@ bool AOApplication::get_blank_blip()
return result.startsWith("true");
}
+bool AOApplication::objection_stop_music()
+{
+ QString result = configini->value("objection_stop_music", "false").value<QString>();
+ return result.startsWith("true");
+}
+
bool AOApplication::is_discord_enabled()
{
QString result = configini->value("discord", "true").value<QString>();