diff --git a/Attorney_Online_remake.pro b/Attorney_Online_remake.pro index 3e70128..a102252 100644 --- a/Attorney_Online_remake.pro +++ b/Attorney_Online_remake.pro @@ -13,7 +13,7 @@ RC_ICONS = logo.ico TARGET = Attorney_Online_remake TEMPLATE = app -VERSION = 2.1.3.0 +VERSION = 2.1.4.0 SOURCES += main.cpp\ lobby.cpp \ diff --git a/aoapplication.h b/aoapplication.h index 4db6e45..2f06970 100644 --- a/aoapplication.h +++ b/aoapplication.h @@ -103,6 +103,7 @@ public: QString get_showname(QString p_char); QString get_chat(QString p_char); int get_preanim_duration(QString p_char, QString p_emote); + int get_ao2_preanim_duration(QString p_char, QString p_emote); int get_text_delay(QString p_char, QString p_emote); QString get_char_name(QString p_char); int get_emote_number(QString p_char); @@ -117,7 +118,7 @@ public: private: const int RELEASE = 2; const int MAJOR_VERSION = 1; - const int MINOR_VERSION = 3; + const int MINOR_VERSION = 4; QString user_theme = "default"; diff --git a/aoblipplayer.cpp b/aoblipplayer.cpp index 27e73a3..9c6a0b1 100644 --- a/aoblipplayer.cpp +++ b/aoblipplayer.cpp @@ -12,7 +12,7 @@ AOBlipPlayer::AOBlipPlayer(QWidget *parent, AOApplication *p_ao_app) void AOBlipPlayer::set_blips(QString p_sfx) { - QString f_path = ao_app->get_sounds_path() + p_sfx; + QString f_path = ao_app->get_sounds_path() + p_sfx.toLower(); for (int n_stream = 0 ; n_stream < 5 ; ++n_stream) { diff --git a/aocharmovie.cpp b/aocharmovie.cpp index db584fa..f4aac9c 100644 --- a/aocharmovie.cpp +++ b/aocharmovie.cpp @@ -19,7 +19,8 @@ AOCharMovie::AOCharMovie(QWidget *p_parent, AOApplication *p_ao_app) : QLabel(p_ this->setMovie(m_movie); connect(m_movie, SIGNAL(frameChanged(int)), this, SLOT(frame_change(int))); - connect(preanim_timer, SIGNAL(timeout()), this, SLOT(preanim_done())); + connect(m_movie, SIGNAL(finished()), this, SLOT(movie_done())); + connect(preanim_timer, SIGNAL(timeout()), this, SLOT(timer_done())); } void AOCharMovie::play(QString p_char, QString p_emote, QString emote_prefix) @@ -63,8 +64,15 @@ void AOCharMovie::play(QString p_char, QString p_emote, QString emote_prefix) void AOCharMovie::play_pre(QString p_char, QString p_emote, int duration) { + if (duration == 0) + play_once = true; + + else + { + play_once = false; + preanim_timer->start(duration); + } play(p_char, p_emote, ""); - preanim_timer->start(duration); } void AOCharMovie::play_talking(QString p_char, QString p_emote) @@ -95,9 +103,15 @@ void AOCharMovie::frame_change(int n_frame) { if (m_flipped && flipped_movie.size() > n_frame) this->setPixmap(QPixmap::fromImage(flipped_movie.at(n_frame))); + + if (m_movie->frameCount() - 1 == n_frame && play_once) + { + delay(m_movie->nextFrameDelay()); + done(); + } } -void AOCharMovie::preanim_done() +void AOCharMovie::timer_done() { done(); } diff --git a/aocharmovie.h b/aocharmovie.h index bd9acd6..2f9cbbc 100644 --- a/aocharmovie.h +++ b/aocharmovie.h @@ -34,12 +34,14 @@ private: bool m_flipped = false; + bool play_once = true; + signals: void done(); private slots: void frame_change(int n_frame); - void preanim_done(); + void timer_done(); }; #endif // AOCHARMOVIE_H diff --git a/aoimage.cpp b/aoimage.cpp index a623332..f523e4e 100644 --- a/aoimage.cpp +++ b/aoimage.cpp @@ -50,5 +50,8 @@ void AOImage::set_scaled_image(QString p_image) QPixmap f_pixmap(final_image_path); - this->setPixmap(f_pixmap.scaled(this->width(), this->height())); + qDebug() << "aoimage width" << this->width(); + qDebug() << "aoimage height" << this->height(); + + this->setPixmap(f_pixmap.scaled(this->width(), this->height(), Qt::IgnoreAspectRatio)); } diff --git a/courtroom.cpp b/courtroom.cpp index 1b48b47..942fbe8 100644 --- a/courtroom.cpp +++ b/courtroom.cpp @@ -43,6 +43,8 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow() music_player->set_volume(0); sfx_player = new AOSfxPlayer(this, ao_app); sfx_player->set_volume(0); + objection_player = new AOSfxPlayer(this, ao_app); + sfx_player->set_volume(0); blip_player = new AOBlipPlayer(this, ao_app); blip_player->set_volume(0); @@ -57,17 +59,18 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow() ui_vp_player_char = new AOCharMovie(ui_viewport, ao_app); ui_vp_desk = new AOScene(ui_viewport, ao_app); ui_vp_legacy_desk = new AOScene(ui_viewport, ao_app); - ui_vp_chatbox = new AOImage(ui_viewport, ao_app); + ui_vp_testimony = new AOImage(ui_viewport, ao_app); + ui_vp_realization = new AOImage(this, ao_app); + ui_vp_wtce = new AOMovie(ui_viewport, ao_app); + ui_vp_objection = new AOMovie(ui_viewport, ao_app); + + ui_vp_chatbox = new AOImage(this, ao_app); ui_vp_showname = new QLabel(ui_vp_chatbox); ui_vp_message = new QPlainTextEdit(ui_vp_chatbox); ui_vp_message->setFrameStyle(QFrame::NoFrame); ui_vp_message->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui_vp_message->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui_vp_message->setReadOnly(true); - ui_vp_testimony = new AOImage(ui_viewport, ao_app); - ui_vp_realization = new AOImage(this, ao_app); - ui_vp_wtce = new AOMovie(ui_viewport, ao_app); - ui_vp_objection = new AOMovie(ui_viewport, ao_app); ui_ic_chatlog = new QPlainTextEdit(this); ui_ic_chatlog->setReadOnly(true); @@ -378,6 +381,7 @@ void Courtroom::set_widgets() "color: white;"); set_size_and_pos(ui_vp_message, "message"); + ui_vp_message->setTextInteractionFlags(Qt::NoTextInteraction); #if (defined (_WIN32) || defined (_WIN64)) ui_vp_message->setFont(pt_10); #else @@ -408,14 +412,14 @@ void Courtroom::set_widgets() #else ui_ic_chatlog->setFont(pt_9); #endif - ui_ic_chatlog->setStyleSheet("background-color: rgba(0, 0, 0, 0);" - "color: white;"); + ui_ic_chatlog->setStyleSheet("QPlainTextEdit{ background-color: rgba(0, 0, 0, 0);" + "color: white; }"); set_size_and_pos(ui_ms_chatlog, "ms_chatlog"); - ui_ms_chatlog->setStyleSheet("background-color: rgba(0, 0, 0, 0);"); + ui_ms_chatlog->setStyleSheet("QPlainTextEdit{ background-color: rgba(0, 0, 0, 0); }"); set_size_and_pos(ui_server_chatlog, "server_chatlog"); - ui_server_chatlog->setStyleSheet("background-color: rgba(0, 0, 0, 0);"); + ui_server_chatlog->setStyleSheet("QPlainTextEdit{ background-color: rgba(0, 0, 0, 0); }"); set_size_and_pos(ui_mute_list, "mute_list"); ui_mute_list->hide(); @@ -601,6 +605,7 @@ void Courtroom::done_received() music_player->set_volume(0); sfx_player->set_volume(0); + objection_player->set_volume(0); blip_player->set_volume(0); set_char_select_page(); @@ -747,6 +752,7 @@ void Courtroom::enter_courtroom(int p_cid) music_player->set_volume(ui_music_slider->value()); sfx_player->set_volume(ui_sfx_slider->value()); + objection_player->set_volume(ui_sfx_slider->value()); blip_player->set_volume(ui_blip_slider->value()); testimony_in_progress = false; @@ -954,7 +960,7 @@ void Courtroom::handle_chatmessage(QStringList *p_contents) if (mute_map.value(m_chatmessage[CHAR_NAME])) return; - QString f_showname = ao_app->get_showname(m_chatmessage[CHAR_NAME]); + QString f_showname = ao_app->get_showname(char_list.at(m_chatmessage[CHAR_ID].toInt()).name); QString f_message = f_showname + ": " + m_chatmessage[MESSAGE] + '\n'; @@ -992,20 +998,20 @@ void Courtroom::handle_chatmessage(QStringList *p_contents) { case 1: ui_vp_objection->play("holdit"); - sfx_player->play("holdit.wav", m_chatmessage[CHAR_NAME]); + objection_player->play("holdit.wav", m_chatmessage[CHAR_NAME]); break; case 2: ui_vp_objection->play("objection"); - sfx_player->play("objection.wav", m_chatmessage[CHAR_NAME]); + objection_player->play("objection.wav", m_chatmessage[CHAR_NAME]); break; case 3: ui_vp_objection->play("takethat"); - sfx_player->play("takethat.wav", m_chatmessage[CHAR_NAME]); + objection_player->play("takethat.wav", m_chatmessage[CHAR_NAME]); break; //case 4 is AO2 only case 4: ui_vp_objection->play("custom", m_chatmessage[CHAR_NAME]); - sfx_player->play("custom.wav", m_chatmessage[CHAR_NAME]); + objection_player->play("custom.wav", m_chatmessage[CHAR_NAME]); break; default: qDebug() << "W: Logic error in objection switch statement!"; @@ -1030,7 +1036,7 @@ void Courtroom::handle_chatmessage_2() ui_vp_speedlines->stop(); ui_vp_player_char->stop(); - QString f_showname = ao_app->get_showname(m_chatmessage[CHAR_NAME]); + QString f_showname = ao_app->get_showname(char_list.at(m_chatmessage[CHAR_ID].toInt()).name); ui_vp_showname->setText(f_showname); @@ -1157,14 +1163,15 @@ void Courtroom::play_preanim() QString f_char = m_chatmessage[CHAR_NAME]; QString f_preanim = m_chatmessage[PRE_EMOTE]; - if (!file_exists(ao_app->get_character_path(f_char) + ".gif")) + if (!file_exists(ao_app->get_character_path(f_char) + f_preanim.toLower() + ".gif")) { preanim_done(); + qDebug() << "could not find " + ao_app->get_character_path(f_char) + f_preanim + ".gif"; return; } //all time values in char.inis are multiplied by a constant(time_mod) to get the actual time - int preanim_duration = ao_app->get_preanim_duration(f_char, f_preanim) * time_mod; + int preanim_duration = ao_app->get_ao2_preanim_duration(f_char, f_preanim) * time_mod; int text_delay = ao_app->get_text_delay(f_char, f_preanim) * time_mod; int sfx_delay = m_chatmessage[SFX_DELAY].toInt() * time_mod; @@ -1720,6 +1727,7 @@ void Courtroom::on_music_slider_moved(int p_value) void Courtroom::on_sfx_slider_moved(int p_value) { sfx_player->set_volume(p_value); + objection_player->set_volume(p_value); ui_ic_chat_message->setFocus(); } @@ -1753,6 +1761,7 @@ void Courtroom::on_change_character_clicked() { music_player->set_volume(0); sfx_player->set_volume(0); + sfx_player->set_volume(0); blip_player->set_volume(0); ui_char_select_background->show(); @@ -1862,4 +1871,6 @@ Courtroom::~Courtroom() { delete music_player; delete sfx_player; + delete objection_player; + delete blip_player; } diff --git a/courtroom.h b/courtroom.h index 5d6b0cd..4622ee0 100644 --- a/courtroom.h +++ b/courtroom.h @@ -190,6 +190,7 @@ private: AOMusicPlayer *music_player; AOSfxPlayer *sfx_player; + AOSfxPlayer *objection_player; AOBlipPlayer *blip_player; AOSfxPlayer *modcall_player; diff --git a/text_file_functions.cpp b/text_file_functions.cpp index 0812ded..bc8490d 100644 --- a/text_file_functions.cpp +++ b/text_file_functions.cpp @@ -247,6 +247,15 @@ int AOApplication::get_preanim_duration(QString p_char, QString p_emote) else return f_result.toInt(); } +int AOApplication::get_ao2_preanim_duration(QString p_char, QString p_emote) +{ + QString f_result = read_char_ini(p_char, "%" + p_emote, "[Time]", "[Emotions]"); + + if (f_result == "") + return 0; + else return f_result.toInt(); +} + int AOApplication::get_emote_number(QString p_char) { QString f_result = read_char_ini(p_char, "number", "[Emotions]", "[SoundN]");