aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/aoapplication.h39
-rw-r--r--include/aocharmovie.h125
-rw-r--r--include/aoevidencedisplay.h4
-rw-r--r--include/aolayer.h221
-rw-r--r--include/aomovie.h36
-rw-r--r--include/aooptionsdialog.h2
-rw-r--r--include/aopacket.h2
-rw-r--r--include/aoscene.h42
-rw-r--r--include/courtroom.h83
-rw-r--r--include/demoserver.h55
-rw-r--r--resource/translations/ao_de.qmbin23500 -> 49427 bytes
-rw-r--r--resource/translations/ao_de.ts830
-rw-r--r--resource/translations/ao_en.qmbin23 -> 33 bytes
-rw-r--r--resource/translations/ao_en.ts739
-rw-r--r--resource/translations/ao_es.qmbin49363 -> 48028 bytes
-rw-r--r--resource/translations/ao_es.ts672
-rw-r--r--resource/translations/ao_jp.qmbin2004 -> 3937 bytes
-rw-r--r--resource/translations/ao_jp.ts796
-rw-r--r--resource/translations/ao_pl.qmbin48099 -> 53311 bytes
-rw-r--r--resource/translations/ao_pl.ts818
-rw-r--r--resource/translations/ao_pt.qmbin48985 -> 47721 bytes
-rw-r--r--resource/translations/ao_pt.ts672
-rw-r--r--resource/translations/ao_ru.qmbin21968 -> 39989 bytes
-rw-r--r--resource/translations/ao_ru.ts720
-rw-r--r--src/aoapplication.cpp8
-rw-r--r--src/aocharmovie.cpp332
-rw-r--r--src/aoevidencedisplay.cpp10
-rw-r--r--src/aolayer.cpp601
-rw-r--r--src/aomovie.cpp100
-rw-r--r--src/aomusicplayer.cpp6
-rw-r--r--src/aooptionsdialog.cpp16
-rw-r--r--src/aopacket.cpp10
-rw-r--r--src/aoscene.cpp132
-rw-r--r--src/charselect.cpp74
-rw-r--r--src/courtroom.cpp713
-rw-r--r--src/demoserver.cpp304
-rw-r--r--src/lobby.cpp12
-rw-r--r--src/networkmanager.cpp2
-rw-r--r--src/packet_distribution.cpp48
-rw-r--r--src/path_functions.cpp10
-rw-r--r--src/text_file_functions.cpp178
41 files changed, 5212 insertions, 3200 deletions
diff --git a/include/aoapplication.h b/include/aoapplication.h
index 776a5f13..8bd0781e 100644
--- a/include/aoapplication.h
+++ b/include/aoapplication.h
@@ -1,8 +1,11 @@
#ifndef AOAPPLICATION_H
#define AOAPPLICATION_H
+#define UNUSED(x) (void)(x)
+
#include "aopacket.h"
#include "datatypes.h"
+#include "demoserver.h"
#include "discord_rich_presence.h"
#include "bass.h"
@@ -28,6 +31,8 @@
#include <QTextStream>
#include <QTime>
+#include <QElapsedTimer>
+
class NetworkManager;
class Lobby;
class Courtroom;
@@ -129,6 +134,7 @@ public:
QString get_default_theme_path(QString p_file);
QString get_custom_theme_path(QString p_theme, QString p_file);
QString get_character_path(QString p_char, QString p_file);
+ QString get_misc_path(QString p_misc, QString p_file);
QString get_sounds_path(QString p_file);
QString get_music_path(QString p_song);
QString get_background_path(QString p_file);
@@ -223,6 +229,9 @@ public:
// Current wait time between messages for the queue system
int stay_time();
+ // Returns Minimum amount of time (in miliseconds) that must pass before the next Enter key press will send your IC message. (new behaviour)
+ int get_chat_ratelimit();
+
// Returns whether the log should go upwards (new behaviour)
// or downwards (vanilla behaviour).
bool get_log_goes_downwards();
@@ -265,6 +274,9 @@ public:
// directory if it doesn't exist.
bool append_to_file(QString p_text, QString p_file, bool make_dir = false);
+ // Append to the currently open demo file if there is one
+ void append_to_demofile(QString packet_string);
+
// Appends the argument string to serverlist.txt
void write_to_serverlist_txt(QString p_line);
@@ -294,14 +306,14 @@ public:
// Returns the color with p_identifier from p_file
QColor get_color(QString p_identifier, QString p_file);
- // Returns the markdown symbol used for specified p_identifier such as colors
- QString get_chat_markdown(QString p_identifier, QString p_file);
+ // Returns the markup symbol used for specified p_identifier such as colors
+ QString get_chat_markup(QString p_identifier, QString p_file);
// Returns the color from the misc folder.
QColor get_chat_color(QString p_identifier, QString p_chat);
// Returns the sfx with p_identifier from sounds.ini in the current theme path
- QString get_sfx(QString p_identifier);
+ QString get_sfx(QString p_identifier, QString p_misc="default");
// Figure out if we can opus this or if we should fall back to wav
QString get_sfx_suffix(QString sound_to_check);
@@ -337,6 +349,9 @@ public:
// Returns the showname from the ini of p_char
QString get_showname(QString p_char);
+ // Returns the category of this character
+ QString get_category(QString p_char);
+
// Returns the value of chat image from the specific p_char's ini file
QString get_chat(QString p_char);
@@ -370,9 +385,9 @@ public:
// t
QString get_effect(QString effect, QString p_char, QString p_folder);
- // Return the effect sound associated with the fx_name in the
- // misc/effects/<char-defined>/sounds.ini, or theme/effects/sounds.ini.
- QString get_effect_sound(QString fx_name, QString p_char);
+ // Return p_property of fx_name. If p_property is "sound", return
+ // the value associated with fx_name, otherwise use fx_name + '_' + p_property.
+ QString get_effect_property(QString fx_name, QString p_char, QString p_property);
// Returns the custom realisation used by the character.
QString get_custom_realization(QString p_char);
@@ -422,6 +437,15 @@ public:
// Returns p_char's blips (previously called their "gender")
QString get_blips(QString p_char);
+ // Get a property of a given emote, or get it from "options" if emote doesn't have it
+ QString get_emote_property(QString p_char, QString p_emote, QString p_property);
+
+ // Return a transformation mode from a string ("smooth" for smooth, anything else for fast)
+ Qt::TransformationMode get_scaling(QString p_scaling);
+
+ // Returns the scaling type for p_miscname
+ Qt::TransformationMode get_misc_scaling(QString p_miscname);
+
// ======
// These are all casing-related settings.
// ======
@@ -462,6 +486,9 @@ public:
void *user);
static void doBASSreset();
+ QElapsedTimer demo_timer;
+ DemoServer* demo_server = nullptr;
+
private:
const int RELEASE = 2;
const int MAJOR_VERSION = 8;
diff --git a/include/aocharmovie.h b/include/aocharmovie.h
deleted file mode 100644
index 2dda0ec2..00000000
--- a/include/aocharmovie.h
+++ /dev/null
@@ -1,125 +0,0 @@
-#ifndef AOCHARMOVIE_H
-#define AOCHARMOVIE_H
-
-#include <QDebug>
-#include <QElapsedTimer>
-#include <QImageReader>
-#include <QLabel>
-#include <QTimer>
-
-class AOApplication;
-
-class AOCharMovie : public QLabel {
- Q_OBJECT
-
-public:
- AOCharMovie(QWidget *p_parent, AOApplication *p_ao_app);
-
- // Play a hat.gif - style preanimation
- void play_pre(QString p_char, QString p_emote, int duration);
-
- // Play a (b)normal.gif - style animation (talking)
- void play_talking(QString p_char, QString p_emote);
-
- // Play an (a)normal.gif - style animation (not talking)
- void play_idle(QString p_char, QString p_emote);
-
- // Stop the movie, clearing the image
- void stop();
-
- // Set the m_flipped variable to true/false
- void set_flipped(bool p_flipped) { m_flipped = p_flipped; }
-
- // Set the movie's playback speed (between 10% and 1000%)
- void set_speed(int modifier) { speed = qMax(10, qMin(modifier, 1000)); }
-
- // Move the label itself around
- void move(int ax, int ay);
-
- // This is somewhat pointless now as there's no "QMovie" object to resize, aka
- // no "combo" to speak of
- void combo_resize(int w, int h);
-
- // Return the frame delay adjusted for speed
- int get_frame_delay(int delay);
-
- QStringList network_strings;
-
- QString m_char;
- QString m_emote;
-
-private:
- AOApplication *ao_app;
-
- QVector<QPixmap> movie_frames;
- QVector<int> movie_delays;
-
- // Effects such as sfx, screenshakes and realization flashes are stored in
- // here. QString entry format: "sfx^[sfx_name]", "shake", "flash". The program
- // uses the QVector index as reference.
- QVector<QVector<QString>> movie_effects;
-
- QTimer *preanim_timer;
- QTimer *ticker;
- QString last_path;
- QImageReader *m_reader = new QImageReader();
-
- QElapsedTimer actual_time;
-
- // Usually used to turn seconds into milliseconds such as for [Time] tag in
- // char.ini
- const int time_mod = 60;
-
- // These are the X and Y values before they are fixed based on the sprite's
- // width.
- int x = 0;
- int y = 0;
- // These are the width and height values before they are fixed based on the
- // sprite's width.
- int f_w = 0;
- int f_h = 0;
-
- int frame = 0;
- int max_frames = 0;
-
- int speed = 100;
-
- bool m_flipped = false;
- bool play_once = true;
-
- // Set the movie's image to provided paths, preparing for playback.
- void load_image(QString p_char, QString p_emote, QString emote_prefix);
-
- // Start playback of the movie (if animated).
- void play();
-
- // Play a frame-specific effect, if there's any defined for that specific
- // frame.
- void play_frame_effect(int frame);
-
- // Retreive a pixmap adjused for mirroring/aspect ratio shenanigans from a
- // provided QImage
- QPixmap get_pixmap(QImage image);
-
- // Set the movie's frame to provided pixmap
- void set_frame(QPixmap f_pixmap);
-
- // Initialize the frame-specific effects from the char.ini
- void load_effects();
-
- // Initialize the frame-specific effects from the provided network_strings,
- // this is only initialized if network_strings has size more than 0.
- void load_network_effects();
-
-signals:
- void done();
- void shake();
- void flash();
- void play_sfx(QString sfx);
-
-private slots:
- void preanim_done();
- void movie_ticker();
-};
-
-#endif // AOCHARMOVIE_H
diff --git a/include/aoevidencedisplay.h b/include/aoevidencedisplay.h
index 979a754e..ff448c91 100644
--- a/include/aoevidencedisplay.h
+++ b/include/aoevidencedisplay.h
@@ -2,7 +2,7 @@
#define AOEVIDENCEDISPLAY_H
#include "aoapplication.h"
-#include "aomovie.h"
+#include "aolayer.h"
#include "aosfxplayer.h"
#include <QDebug>
@@ -21,7 +21,7 @@ public:
private:
AOApplication *ao_app;
- AOMovie *evidence_movie;
+ InterfaceLayer *evidence_movie;
QLabel *evidence_icon;
AOSfxPlayer *sfx_player;
diff --git a/include/aolayer.h b/include/aolayer.h
new file mode 100644
index 00000000..6265cec6
--- /dev/null
+++ b/include/aolayer.h
@@ -0,0 +1,221 @@
+#ifndef AOLAYER_H
+#define AOLAYER_H
+
+#include <QDebug>
+#include <QElapsedTimer>
+#include <QImageReader>
+#include <QLabel>
+#include <QTimer>
+#include <QBitmap>
+
+class AOApplication;
+
+class AOLayer : public QLabel {
+ Q_OBJECT
+
+public:
+ AOLayer(QWidget *p_parent, AOApplication *p_ao_app);
+
+ QString filename; // file name without extension, i.e. "witnesstestimony"
+ int static_duration; // time in ms for static images to be displayed, if
+ // applicable. set to 0 for infinite
+ int max_duration; // maximum duration in ms, image will be culled if it is
+ // exceeded. set this to 0 for infinite duration
+ bool play_once = false; // Whether to loop this animation or not
+ bool cull_image = true; // if we're done playing this animation, should we
+ // hide it? also controls durational culling
+ Qt::TransformationMode transform_mode = Qt::FastTransformation; // transformation mode to use for this image
+ bool stretch = false; // Should we stretch/squash this image to fill the screen?
+
+ // Set the movie's image to provided paths, preparing for playback.
+ void start_playback(QString p_image);
+
+ void set_play_once(bool p_play_once);
+ void set_cull_image(bool p_cull_image);
+ void set_static_duration(int p_static_duration);
+ void set_max_duration(int p_max_duration);
+
+ // Stop the movie, clearing the image
+ void stop();
+
+ // Set the m_flipped variable to true/false
+ void set_flipped(bool p_flipped) { m_flipped = p_flipped; }
+
+ // Set the movie's playback speed (between 10% and 1000%)
+ void set_speed(int modifier) { speed = qMax(10, qMin(modifier, 1000)); }
+
+ // Move the label itself around
+ void move(int ax, int ay);
+
+ // This is somewhat pointless now as there's no "QMovie" object to resize, aka
+ // no "combo" to speak of
+ void combo_resize(int w, int h);
+
+ // Return the frame delay adjusted for speed
+ int get_frame_delay(int delay);
+
+ // iterate through a list of paths and return the first entry that exists. if
+ // none exist, return NULL (safe because we check again for existence later)
+ QString find_image(QList<QString> p_list);
+
+protected:
+ AOApplication *ao_app;
+ QVector<QPixmap> movie_frames;
+ QVector<int> movie_delays;
+
+ QTimer *preanim_timer;
+ QTimer *shfx_timer;
+ QTimer *ticker;
+ QString last_path;
+ QImageReader m_reader;
+
+ QElapsedTimer actual_time;
+
+ // Usually used to turn seconds into milliseconds such as for [Time] tag in
+ // char.ini
+ const int tick_ms = 60;
+
+ // These are the X and Y values before they are fixed based on the sprite's
+ // width.
+ int x = 0;
+ int y = 0;
+ // These are the width and height values before they are fixed based on the
+ // sprite's width.
+ int f_w = 0;
+ int f_h = 0;
+
+ int frame = 0;
+ int max_frames = 0;
+ int last_max_frames = 0;
+
+ int speed = 100;
+
+ bool m_flipped = false;
+ // Are we loading this from the same frame we left off on? TODO: actually make
+ // this work
+ bool continuous = false;
+ // Whether or not to forcibly bypass the simple check done by start_playback
+ // and use the existent value of continuous instead
+ bool force_continuous = false;
+
+ int duration = 0;
+
+ // Start playback of the movie (if animated).
+ void play();
+
+ // Freeze the movie at the current frame.
+ void freeze();
+
+ // Retreive a pixmap adjused for mirroring/aspect ratio shenanigans from a
+ // provided QImage
+ QPixmap get_pixmap(QImage image);
+
+ // Set the movie's frame to provided pixmap
+ void set_frame(QPixmap f_pixmap);
+
+signals:
+ void done();
+
+protected slots:
+ virtual void preanim_done();
+ void shfx_timer_done();
+ virtual void movie_ticker();
+};
+
+class BackgroundLayer : public AOLayer {
+ Q_OBJECT
+public:
+ BackgroundLayer(QWidget *p_parent, AOApplication *p_ao_app);
+ void load_image(QString p_filename);
+};
+
+class ForegroundLayer : public AOLayer {
+ Q_OBJECT
+public:
+ ForegroundLayer(QWidget *p_parent, AOApplication *p_ao_app);
+ QString miscname; //'misc' folder to search. we fetch this based on p_charname below
+ void load_image(QString p_filename, QString p_charname);
+};
+
+class CharLayer : public AOLayer {
+ Q_OBJECT
+public:
+ CharLayer(QWidget *p_parent, AOApplication *p_ao_app);
+ QString current_emote = ""; // name of the emote we're using
+ bool is_preanim; // equivalent to the old play_once, if true we don't want
+ // to loop this
+ QString prefix = ""; // prefix, left blank if it's a preanim
+
+ void load_image(QString p_filename, QString p_charname, int p_duration, bool p_is_preanim);
+ void play(); // overloaded so we can play effects
+
+ // networked frame fx string
+ QStringList network_strings;
+
+private:
+ QString last_char; // name of the last character we used
+ QString last_emote; // name of the last animation we used
+ QString last_prefix; // prefix of the last animation we played
+ bool was_preanim = false; // whether is_preanim was true last time
+
+ // Effects such as sfx, screenshakes and realization flashes are stored in
+ // here. QString entry format: "sfx^[sfx_name]", "shake", "flash". The program
+ // uses the QVector index as reference.
+ QVector<QVector<QString>> movie_effects;
+
+ // used for effect loading
+ QString m_char = "";
+ QString m_emote = "";
+
+ // overloaded for effects reasons
+ void start_playback(QString p_image);
+
+ // Initialize the frame-specific effects from the char.ini
+ void load_effects();
+
+ // Initialize the frame-specific effects from the provided network_strings,
+ // this is only initialized if network_strings has size more than 0.
+ void load_network_effects();
+
+ // Play a frame-specific effect, if there's any defined for that specific
+ // frame.
+ void play_frame_effect(int p_frame);
+
+private slots:
+ void preanim_done() override; // overridden so we don't accidentally cull characters
+ void movie_ticker() override; // overridden so we can play effects
+
+signals:
+ void shake();
+ void flash();
+ void play_sfx(QString sfx);
+};
+
+class InterjectionLayer : public AOLayer {
+ Q_OBJECT
+public:
+ InterjectionLayer(QWidget *p_parent, AOApplication *p_ao_app);
+ void load_image(QString p_filename, QString p_charname, QString p_miscname);
+};
+
+class EffectLayer : public AOLayer {
+ Q_OBJECT
+public:
+ EffectLayer(QWidget *p_parent, AOApplication *p_ao_app);
+ void load_image(QString p_filename, bool p_looping);
+};
+
+class InterfaceLayer : public AOLayer {
+ Q_OBJECT
+public:
+ InterfaceLayer(QWidget *p_parent, AOApplication *p_ao_app);
+ void load_image(QString p_filename, QString p_miscname);
+};
+
+class StickerLayer : public AOLayer {
+ Q_OBJECT
+public:
+ StickerLayer(QWidget *p_parent, AOApplication *p_ao_app);
+ void load_image(QString p_charname);
+};
+#endif // AOLAYER_H
diff --git a/include/aomovie.h b/include/aomovie.h
deleted file mode 100644
index eb7f7a53..00000000
--- a/include/aomovie.h
+++ /dev/null
@@ -1,36 +0,0 @@
-#ifndef AOMOVIE_H
-#define AOMOVIE_H
-
-#include <QLabel>
-#include <QMovie>
-
-class Courtroom;
-class AOApplication;
-
-class AOMovie : public QLabel {
- Q_OBJECT
-
-public:
- AOMovie(QWidget *p_parent, AOApplication *p_ao_app);
-
- void set_play_once(bool p_play_once);
- void play(QString p_image, QString p_char = "", QString p_custom_theme = "",
- int default_duration = 0);
- void combo_resize(int w, int h);
- void stop();
-
-private:
- QMovie *m_movie;
- AOApplication *ao_app;
- QTimer *timer;
- bool play_once = true;
-
-signals:
- void done();
-
-private slots:
- void frame_change(int n_frame);
- void timer_done();
-};
-
-#endif // AOMOVIE_H
diff --git a/include/aooptionsdialog.h b/include/aooptionsdialog.h
index 93b66779..74fc9af7 100644
--- a/include/aooptionsdialog.h
+++ b/include/aooptionsdialog.h
@@ -58,6 +58,8 @@ private:
QCheckBox *ui_desync_logs_cb;
QLabel *ui_instant_objection_lbl;
QCheckBox *ui_instant_objection_cb;
+ QLabel *ui_chat_ratelimit_lbl;
+ QSpinBox *ui_chat_ratelimit_spinbox;
QLabel *ui_log_ic_actions_lbl;
QCheckBox *ui_log_ic_actions_cb;
QFrame *ui_log_names_divider;
diff --git a/include/aopacket.h b/include/aopacket.h
index 6d1debad..794025c5 100644
--- a/include/aopacket.h
+++ b/include/aopacket.h
@@ -12,7 +12,7 @@ public:
QString get_header() { return m_header; }
QStringList &get_contents() { return m_contents; }
- QString to_string();
+ QString to_string(bool encoded = false);
void net_encode();
void net_decode();
diff --git a/include/aoscene.h b/include/aoscene.h
deleted file mode 100644
index 726e2641..00000000
--- a/include/aoscene.h
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef AOSCENE_H
-#define AOSCENE_H
-
-#include <QDebug>
-#include <QLabel>
-#include <QMovie>
-
-class Courtroom;
-class AOApplication;
-
-class AOScene : public QLabel {
- Q_OBJECT
-public:
- explicit AOScene(QWidget *parent, AOApplication *p_ao_app);
-
- void set_image(QString p_image);
- void set_legacy_desk(QString p_image);
-
- // Move the label itself around
- void move(int ax, int ay);
-
- // This is somewhat pointless now as there's no "QMovie" object to resize, aka
- // no "combo" to speak of
- void combo_resize(int w, int h);
-
-private:
- QWidget *m_parent;
- QMovie *m_movie;
- AOApplication *ao_app;
- QString last_image;
-
- // These are the X and Y values before they are fixed based on the sprite's
- // width.
- int x = 0;
- int y = 0;
- // These are the width and height values before they are fixed based on the
- // sprite's width.
- int f_w = 0;
- int f_h = 0;
-};
-
-#endif // AOSCENE_H
diff --git a/include/courtroom.h b/include/courtroom.h
index d9967157..0dcc53de 100644
--- a/include/courtroom.h
+++ b/include/courtroom.h
@@ -5,18 +5,16 @@
#include "aoblipplayer.h"
#include "aobutton.h"
#include "aocharbutton.h"
-#include "aocharmovie.h"
#include "aoclocklabel.h"
#include "aoemotebutton.h"
#include "aoevidencebutton.h"
#include "aoevidencedisplay.h"
#include "aoimage.h"
+#include "aolayer.h"
#include "aolineedit.h"
-#include "aomovie.h"
#include "aomusicplayer.h"
#include "aooptionsdialog.h"
#include "aopacket.h"
-#include "aoscene.h"
#include "aosfxplayer.h"
#include "aotextarea.h"
#include "aotextedit.h"
@@ -152,6 +150,9 @@ public:
// reads theme inis and sets size and pos based on the identifier
void set_size_and_pos(QWidget *p_widget, QString p_identifier);
+ // reads theme and char inis and sets size and pos based on the identifier
+ void set_size_and_pos(QWidget *p_widget, QString p_identifier, QString p_char);
+
// reads theme inis and returns the size and pos as defined by it
QPoint get_theme_pos(QString p_identifier);
@@ -225,11 +226,13 @@ public:
// Parse the chat message packet and unpack it into the m_chatmessage[ITEM] format
void unpack_chatmessage(QStringList p_contents);
- // Log the message contents and information such as evidence presenting etc. into the log file
- void log_chatmessage(QString f_message, int f_char_id, QString f_showname = "", int f_color = 0);
-
- // Display the message contents and information such as evidence presenting etc. in the IC logs
- void display_log_chatmessage(QString f_message, int f_char_id, QString f_showname = "", int f_color = 0);
+ enum LogMode {
+ IO_ONLY,
+ DISPLAY_ONLY,
+ DISPLAY_AND_IO
+ };
+ // Log the message contents and information such as evidence presenting etc. into the log file, the IC log, or both.
+ void log_chatmessage(QString f_message, int f_char_id, QString f_showname = "", int f_color = 0, LogMode f_log_mode=IO_ONLY);
// Log the message contents and information such as evidence presenting etc. into the IC logs
void handle_callwords();
@@ -265,7 +268,8 @@ public:
QString filter_ic_text(QString p_text, bool colorize = false, int pos = -1,
int default_color = 0);
- void log_ic_text(QString p_name, QString p_showname, QString p_message, QString p_action="", int p_color=0);
+ void log_ic_text(QString p_name, QString p_showname, QString p_message,
+ QString p_action = "", int p_color = 0);
// adds text to the IC chatlog. p_name first as bold then p_text then a newlin
// this function keeps the chatlog scrolled to the top unless there's text
@@ -357,6 +361,7 @@ private:
QVector<QString> arup_locks;
QVector<chatlogpiece> ic_chatlog_history;
+ QString last_ic_message = "";
QQueue<QStringList> chatmessage_queue;
@@ -392,7 +397,8 @@ private:
// True, if log should display colors.
bool log_colors = true;
- // True, if the log should display the message like name<br>text instead of name: text
+ // True, if the log should display the message like name<br>text instead of
+ // name: text
bool log_newline = false;
// True, if the log should include RP actions like interjections, showing evidence, etc.
@@ -420,16 +426,21 @@ private:
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;
+ // onscreen for in ms, and the maximum amount of time any interjections are
+ // allowed to play
+ const int shout_static_time = 724;
+ const int shout_max_time = 1500;
// the amount of time non-animated guilty/not guilty images stay onscreen for
- // in ms
- const int verdict_stay_time = 3000;
+ // in ms, and the maximum amount of time g/ng images are allowed to play
+ const int verdict_static_time = 3000;
+ const int verdict_max_time = 4000;
// the amount of time non-animated witness testimony/cross-examination images
- // stay onscreen for in ms
- const int wtce_stay_time = 1500;
+ // stay onscreen for in ms, and the maximum time any wt/ce image is allowed to
+ // play
+ const int wtce_static_time = 1500;
+ const int wtce_max_time = 4000;
// characters we consider punctuation
const QString punctuation_chars = ".,?!:;";
@@ -453,7 +464,7 @@ private:
bool is_muted = false;
// state of animation, 0 = objecting, 1 = preanim, 2 = talking, 3 = idle, 4 =
- // noniterrupting preanim
+ // noniterrupting preanim, 5 = (c) animation
int anim_state = 3;
// whether or not current color is a talking one
@@ -516,8 +527,15 @@ private:
// List of all currently available pos
QStringList pos_dropdown_list;
+ // Current list file sorted line by line
+ QStringList sound_list;
+
+ // Current SFX the user put in for the sfx dropdown list
+ QString custom_sfx = "";
+
// is the message we're about to send supposed to present evidence?
bool is_presenting_evidence = false;
+ bool c_played = false; // whether we've played a (c)-style postanimation yet
// have we already presented evidence for this message?
bool evidence_presented = false;
@@ -585,21 +603,20 @@ private:
AOImage *ui_background;
QWidget *ui_viewport;
- AOScene *ui_vp_background;
- AOMovie *ui_vp_speedlines;
- AOCharMovie *ui_vp_player_char;
- AOCharMovie *ui_vp_sideplayer_char;
- AOScene *ui_vp_desk;
- AOScene *ui_vp_legacy_desk;
+ BackgroundLayer *ui_vp_background;
+ ForegroundLayer *ui_vp_speedlines;
+ CharLayer *ui_vp_player_char;
+ CharLayer *ui_vp_sideplayer_char;
+ BackgroundLayer *ui_vp_desk;
AOEvidenceDisplay *ui_vp_evidence_display;
AOImage *ui_vp_chatbox;
QLabel *ui_vp_showname;
- AOMovie *ui_vp_chat_arrow;
+ InterfaceLayer *ui_vp_chat_arrow;
QTextEdit *ui_vp_message;
- AOMovie *ui_vp_effect;
- AOMovie *ui_vp_testimony;
- AOMovie *ui_vp_wtce;
- AOMovie *ui_vp_objection;
+ EffectLayer *ui_vp_effect;
+ InterfaceLayer *ui_vp_testimony;
+ InterjectionLayer *ui_vp_wtce;
+ InterjectionLayer *ui_vp_objection;
QTextEdit *ui_ic_chatlog;
@@ -611,7 +628,9 @@ private:
QTreeWidget *ui_music_list;
ScrollText *ui_music_name;
- AOMovie *ui_music_display;
+ InterfaceLayer *ui_music_display;
+
+ StickerLayer *ui_vp_sticker;
static const int max_clocks = 5;
AOClockLabel *ui_clock[max_clocks];
@@ -724,6 +743,9 @@ private:
AOImage *ui_char_select_background;
+ // pretty list of characters
+ QTreeWidget *ui_char_list;
+
// abstract widget to hold char buttons
QWidget *ui_char_buttons;
@@ -765,6 +787,7 @@ private:
void regenerate_ic_chatlog();
public slots:
void objection_done();
+ void effect_done();
void preanim_done();
void do_screenshake();
void do_flash();
@@ -820,6 +843,7 @@ private slots:
void on_iniswap_remove_clicked();
void on_sfx_dropdown_changed(int p_index);
+ void on_sfx_dropdown_custom(QString p_sfx);
void set_sfx_dropdown();
void on_sfx_context_menu_requested(const QPoint &pos);
void on_sfx_edit_requested();
@@ -916,6 +940,7 @@ private slots:
void on_back_to_lobby_clicked();
+ void on_char_list_double_clicked(QTreeWidgetItem *p_item, int column);
void on_char_select_left_clicked();
void on_char_select_right_clicked();
void on_char_search_changed();
diff --git a/include/demoserver.h b/include/demoserver.h
new file mode 100644
index 00000000..b21811b7
--- /dev/null
+++ b/include/demoserver.h
@@ -0,0 +1,55 @@
+#ifndef DEMOSERVER_H
+#define DEMOSERVER_H
+
+#include "aopacket.h"
+
+#include <QDebug>
+#include <QObject>
+#include <QQueue>
+#include <QTcpServer>
+#include <QTcpSocket>
+#include <QTimer>
+#include <QFileDialog>
+
+class DemoServer : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DemoServer(QObject *parent = nullptr);
+
+ bool server_started = false;
+ int port = 27088;
+ int max_wait = -1;
+ int min_wait = -1;
+
+private:
+ void handle_packet(AOPacket packet);
+ void load_demo(QString filename);
+
+ QTcpServer* tcp_server;
+ QTcpSocket* client_sock = nullptr;
+ bool client_connected = false;
+ bool partial_packet = false;
+ QString temp_packet = "";
+ QQueue<QString> demo_data;
+ QString sc_packet;
+ int num_chars = 0;
+ QString p_path;
+ QTimer *timer;
+ int elapsed_time = 0;
+
+private slots:
+ void accept_connection();
+ void destroy_connection();
+ void recv_data();
+ void client_disconnect();
+ void playback();
+
+public slots:
+ void start_server();
+
+signals:
+
+};
+
+#endif // DEMOSERVER_H
diff --git a/resource/translations/ao_de.qm b/resource/translations/ao_de.qm
index 6fd250de..0025260f 100644
--- a/resource/translations/ao_de.qm
+++ b/resource/translations/ao_de.qm
Binary files differ
diff --git a/resource/translations/ao_de.ts b/resource/translations/ao_de.ts
index c4e96b9a..f29d8552 100644
--- a/resource/translations/ao_de.ts
+++ b/resource/translations/ao_de.ts
@@ -27,7 +27,7 @@ Wir verwenden mehrere Master Server um Ausfälle zu verhindern, jedoch hat der C
Bitte prüfe deine Internetverbindung und Firewall, und versuche es erneut.</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="94"/>
+ <location filename="../../src/packet_distribution.cpp" line="93"/>
<source>Outdated version! Your version: %1
Please go to aceattorneyonline.com to update.</source>
<translation>Version zu alt! Deine Version: %1
@@ -40,54 +40,51 @@ Have a nice day.</source>
Schönen Urlaub.</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="235"/>
+ <location filename="../../src/packet_distribution.cpp" line="248"/>
<source>Attorney Online 2</source>
<translation>Attorney Online 2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="263"/>
+ <location filename="../../src/packet_distribution.cpp" line="276"/>
<source>Loading</source>
<translation>Laden</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="363"/>
<source>Loading evidence:
%1/%2</source>
- <translation>Lade Beweisstücke:
+ <translation type="vanished">Lade Beweisstücke:
%1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="398"/>
- <location filename="../../src/packet_distribution.cpp" line="492"/>
+ <location filename="../../src/packet_distribution.cpp" line="358"/>
<source>Loading music:
%1/%2</source>
<translation>Lade Musik:
%1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="316"/>
- <location filename="../../src/packet_distribution.cpp" line="465"/>
+ <location filename="../../src/packet_distribution.cpp" line="331"/>
<source>Loading chars:
%1/%2</source>
<translation>Lade Charaktere:
%1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="674"/>
+ <location filename="../../src/packet_distribution.cpp" line="550"/>
<source>You have been kicked from the server.
Reason: %1</source>
<translation>Du wurdest von diesem Server geschmissen.
Grund: %1</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="682"/>
+ <location filename="../../src/packet_distribution.cpp" line="558"/>
<source>You have been banned from the server.
Reason: %1</source>
<translation>Du wurdest von diesem Server verbannt.
Grund: %1</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="690"/>
+ <location filename="../../src/packet_distribution.cpp" line="566"/>
<source>You are banned on this server.
Reason: %1</source>
<translation>Du bist von diesem Server verbannt.
@@ -239,42 +236,112 @@ Grund: </translation>
<translation>Die Menge an Nachrichten die aufgehoben werden bevor alte gelöscht werden. 0 bedeutet unendlich.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="133"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="125"/>
+ <source>Log newline:</source>
+ <translation>Absätze protokollieren:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="127"/>
+ <source>If ticked, new messages will appear separated, with the message coming on the next line after the name. When unticked, it displays it as &apos;name: message&apos;.</source>
+ <translation>Wenn Nachrichten mehrere Zeilen enthalten wird dies mitprotokolliert.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="140"/>
+ <source>Log margin:</source>
+ <translation>Protokollabstand:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="141"/>
+ <source>The distance in pixels between each entry in the IC log. Default: 0.</source>
+ <translation>Setzt den Abstand zwischen den Zeilen im Protokoll. Standard: 0.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="155"/>
+ <source>Log timestamp:</source>
+ <translation>Zeitstempel:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="157"/>
+ <source>If ticked, log will contain a timestamp in UTC before the name.</source>
+ <translation>Das Protokoll enthält vor dem Namen einen Zeitstempel in UTC.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="168"/>
+ <source>Log IC actions:</source>
+ <translation>Aktionen protokollieren:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="170"/>
+ <source>If ticked, log will show IC actions such as shouting and presenting evidence.</source>
+ <translation>Protokolliert Charakteraktionen wie Zwischenrufe und Beweisstücke.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="182"/>
+ <source>Text Stay Time:</source>
+ <translation>Standzeit:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="183"/>
+ <source>Minimum amount of time (in miliseconds) an IC message must stay on screen before the next IC message is shown, acting as a &apos;queue&apos;. Set to 0 to disable this behaivor.</source>
+ <translation>Minimale Zeit (in Milisekunden) die eine Nachricht auf dem Bildschirm bleibt bevor die nächste gezeigt wird. 0 deaktiviert dies.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="197"/>
+ <source>Desynchronize IC Logs:</source>
+ <translation>Protokoll desynchronisieren:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="199"/>
+ <source>If ticked, log will show messages as-received, while viewport will parse according to the queue (Text Stay Time).</source>
+ <translation>Wenn angehakt werden die Nachrichten sofort im Protokoll angezeigt, ansonsten wartet es auf den Chat.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="210"/>
+ <source>Instant Objection:</source>
+ <translation>Zwischenrufe sofort:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="212"/>
+ <source>If Text Stay Time is more than 0, instant objection will skip queued messages instead of waiting to catch up.</source>
+ <translation>Wenn die Standzeit länger als 0 ist überspringen Zwischenrufe die Warteschleife.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="231"/>
<source>Default username:</source>
<translation>Standard Benutzername:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="135"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="233"/>
<source>Your OOC name will be automatically set to this value when you join a server.</source>
<translation>Dein OOC Name wird automatisch auf dies gesetzt.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="148"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="246"/>
<source>Custom shownames:</source>
<translation>Eigener Anzeigename:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="150"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="248"/>
<source>Gives the default value for the in-game &apos;Custom shownames&apos; tickbox, which in turn determines whether the client should display custom in-character names.</source>
<translation>Standardwert für die Anzeigename Box, welche den In-Charakter Namen bestimmt.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="170"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="268"/>
<source>Backup MS:</source>
<translation>Rückfall MS:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="172"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="270"/>
<source>If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address.</source>
<translation>Wenn dereingebaute Master Server fehlschlägt, wird das Spiel diesen hier verwenden.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="185"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="283"/>
<source>Discord:</source>
<translation>Discord:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="187"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="285"/>
<source>Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for.</source>
<translation>Erlaubt anderen auf Discord zu sehen auf welchem Server du spielst, welchen Charakter du spielst und wie lange.</translation>
</message>
@@ -287,12 +354,12 @@ Grund: </translation>
<translation type="vanished">Erlaubt schütteln des Bildschirms und weiße Blitze. Deaktiviere dies falls du Bedenken wegen Photosensitivität hast.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="200"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="298"/>
<source>Language:</source>
<translation>Sprache:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="202"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="300"/>
<source>Sets the language if you don&apos;t want to use your system language.</source>
<translation>Setzte die Sprache falls du nicht die Systemsprache verwenden möchtest.</translation>
</message>
@@ -313,271 +380,291 @@ Grund: </translation>
<translation type="vanished">Aktivieren damit die Blips bei Satzzeichen langsamer werden.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="208"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="306"/>
<source> - Keep current setting</source>
<translation> - aktuelle Einstellung behalten</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="220"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="320"/>
<source>Allow Screenshake:</source>
<translation>Schütteln erlauben:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="222"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="322"/>
<source>Allows screenshaking. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source>
<translation>Erlaubt schütteln des Bildschirms. Deaktiviere dies falls du Bedenken wegen Photosensitivität hast.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="234"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="334"/>
<source>Allow Effects:</source>
<translation>Effekte erlauben:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="236"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="336"/>
<source>Allows screen effects. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source>
<translation>Erlaubt Bildeffekte. Deaktiviere dies falls du Bedenken wegen Photosensitivität hast.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="248"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="348"/>
<source>Network Frame Effects:</source>
<translation>Netzwerk Frame-Effekte:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="249"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="349"/>
<source>Send screen-shaking, flashes and sounds as defined in the char.ini over the network. Only works for servers that support this functionality.</source>
<translation>Sendet schüttel, Blitze und Geräusche aus der char.ini Datei über das Netzwerk. Funkioniert nur wenn der Server dies unterstützt.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="262"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="362"/>
<source>Colors in IC Log:</source>
<translation>Farben im IC Log:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="264"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="364"/>
<source>Use the markup colors in the server IC chatlog.</source>
<translation>Verwendet Farbe im IC Log so wie im Bild.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="275"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="375"/>
<source>Sticky Sounds:</source>
<translation>Klebende Geräuschauswahl:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="277"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="377"/>
<source>Turn this on to prevent the sound dropdown from clearing the sound after playing it.</source>
<translation>Aktiviere dies damit die Geräuschauswahl nicht zurückspringt nachdem es abgespielt wurde.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="289"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="389"/>
<source>Sticky Effects:</source>
<translation>Klebende Effekt:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="291"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="391"/>
<source>Turn this on to prevent the effects dropdown from clearing the effect after playing it.</source>
<translation>Aktiviere dies damit die Effektauswahl nicht zurückspringt nachdem er abgespielt wurde.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="304"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="404"/>
<source>Sticky Preanims:</source>
<translation>Klebende Voranimation:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="306"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="406"/>
<source>Turn this on to prevent preanimation checkbox from clearing after playing the emote.</source>
<translation>Aktiviere dies damit das Kontrollkästchen für die Voranimation nicht zurückspringt nachdem sie abgespielt wurde.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="324"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="418"/>
+ <source>Custom Chatboxes:</source>
+ <translation>Eigene Chatboxen:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="420"/>
+ <source>Turn this on to allow characters to define their own custom chat box designs.</source>
+ <translation>Charaktere können ihre eigenen Chatboxen verwenden.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="438"/>
<source>Callwords</source>
<translation>Alarmwörter</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="351"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="465"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!&lt;br&gt;Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Gib so viele Alarmwörter ein wie du möchtest. Groß/Kleinschreibung ist egal. Für jede Wort nur eine Zeile!&lt;br&gt;Bitte keine leere Zeile am Ende -- du bekommst sonst bei jeder Nachricht einen Alarm.&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="361"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="475"/>
<source>Audio</source>
<translation>Audio</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="375"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="489"/>
<source>Audio device:</source>
<translation>Audiogerät:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="376"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="490"/>
<source>Sets the audio device for all sounds.</source>
<translation>Setzt das Audiogerät für all Geräusche.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="419"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="523"/>
<source>Music:</source>
<translation>Musik:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="420"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="524"/>
<source>Sets the music&apos;s default volume.</source>
<translation>Setzt die Musiklautstärke.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="434"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="538"/>
<source>SFX:</source>
<translation>SFX:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="436"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="540"/>
<source>Sets the SFX&apos;s default volume. Interjections and actual sound effects count as &apos;SFX&apos;.</source>
<translation>Setzt die Lautstärke der Soundeffekte wie Einsprüche und die Geräusche der Charaktere.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="450"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="554"/>
<source>Blips:</source>
<translation>Blips:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="452"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="556"/>
<source>Sets the volume of the blips, the talking sound effects.</source>
<translation>Setzt die Lautstärke der Blips, das ist das Geräusch das die Charaktere beim Reden machen.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="474"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="578"/>
<source>Blip rate:</source>
<translation>Bliprate:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="476"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="580"/>
<source>Sets the delay between playing the blip sounds.</source>
<translation>Setzt die Pause zwischen einzelnen Blips.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="484"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="588"/>
<source>Play a blip sound &quot;once per every X symbols&quot;, where X is the blip rate.</source>
<translation>Spiele ein blip einmal für all X Buchstaben.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="491"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="595"/>
<source>Blank blips:</source>
<translation>Leere Blips:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="493"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="597"/>
<source>If true, the game will play a blip sound even when a space is &apos;being said&apos;.</source>
<translation>Wenn angehakt wird das Spiel auch bei einem Leerzeichen einen Blip machen.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="505"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="609"/>
<source>Enable Looping SFX:</source>
<translation>Wiederholende Soundeffekte:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="506"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="610"/>
<source>If true, the game will allow looping sound effects to play on preanimations.</source>
<translation>Wenn aktiviert, werden wiederholende Soundeffekte bei den Voranimationen erlaubt.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="518"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="622"/>
<source>Kill Music On Objection:</source>
<translation>Stoppe Musik bei Einspruch:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="520"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="624"/>
<source>If true, AO2 will stop the music for you when you or someone else does &apos;Objection!&apos;.</source>
<translation>Hält die Musik an wenn jemand &quot;Einspruch&quot; ruft, wie im echten Spiel.</translation>
</message>
<message>
+ <location filename="../../src/aooptionsdialog.cpp" line="793"/>
+ <source>Automatic Logging:</source>
+ <translation>Autmatisches Protokollieren:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="795"/>
+ <source>If checked, all logs will be automatically written in the /logs folder.</source>
+ <translation>Schreibt die Protokolle automatisch in den /logs Ordner.</translation>
+ </message>
+ <message>
<source>If true, the game will stop music when someone objects, like in the actual games.</source>
<translation type="vanished">Hält die Musik an wenn jemand &quot;Einspruch&quot; ruft, wie im echten Spiel.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="532"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="636"/>
<source>Casing</source>
<translation>Fälle</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="549"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="653"/>
<source>This server supports case alerts.</source>
<translation>Dieser Server unterstützt Fallalarme.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="552"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="656"/>
<source>This server does not support case alerts.</source>
<translation>Dieser Server unterstützt Fallalarme nicht.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="553"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="657"/>
<source>Pretty self-explanatory.</source>
<translation>Eigentlich selbsterklärend.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="562"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="666"/>
<source>Casing:</source>
<translation>Fälle:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="564"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="668"/>
<source>If checked, you will get alerts about case announcements.</source>
<translation>Wenn angehakt wirst du benachrichtigt wenn ein Fall angekündigt wird.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="580"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="684"/>
<source>Defense:</source>
<translation>Verteidigung:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="581"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="685"/>
<source>If checked, you will get alerts about case announcements if a defense spot is open.</source>
<translation>Wenn angehakt wirst du benachrichtigt wenn ein Verteidiger benötigt wird.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="595"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="699"/>
<source>Prosecution:</source>
<translation>Kläger:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="597"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="701"/>
<source>If checked, you will get alerts about case announcements if a prosecutor spot is open.</source>
<translation>Wenn angehakt wirst du benachrichtigt wenn ein Kläger benötigt wird.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="611"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="715"/>
<source>Judge:</source>
<translation>Richter:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="612"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="716"/>
<source>If checked, you will get alerts about case announcements if the judge spot is open.</source>
<translation>Wenn angehakt wirst du benachrichtigt wenn ein Richter benötigt wird.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="626"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="730"/>
<source>Juror:</source>
<translation>Jury:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="627"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="731"/>
<source>If checked, you will get alerts about case announcements if a juror spot is open.</source>
<translation>Wenn angehakt wirst du benachrichtigt wenn eine Jury benötigt wird.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="641"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="745"/>
<source>Stenographer:</source>
<translation>Stenograph:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="643"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="747"/>
<source>If checked, you will get alerts about case announcements if a stenographer spot is open.</source>
<translation>Wenn angehakt wirst du benachrichtigt wenn ein Stenograph benötigt wird.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="657"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="761"/>
<source>CM:</source>
<translation>CM:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="659"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="763"/>
<source>If checked, you will appear amongst the potential CMs on the server.</source>
<translation>Wenn angehakt wirst du als potentielle CM angezeigt.</translation>
</message>
@@ -590,12 +677,12 @@ Grund: </translation>
<translation type="vanished">Wenn angehakt wirst du als potentielle Zeuge angezeigt.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="673"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="777"/>
<source>Hosting cases:</source>
<translation>Fallleitung:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="675"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="779"/>
<source>If you&apos;re a CM, enter what cases you are willing to host.</source>
<translation>Wenn du CM bist, gib ein welche Fälle du spielen möchtest.</translation>
</message>
@@ -603,33 +690,33 @@ Grund: </translation>
<context>
<name>Courtroom</name>
<message>
- <location filename="../../src/charselect.cpp" line="21"/>
+ <location filename="../../src/charselect.cpp" line="23"/>
<source>Password</source>
<translation>Passwort</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="27"/>
+ <location filename="../../src/charselect.cpp" line="29"/>
<source>Spectator</source>
<translation>Zuschauer</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="30"/>
- <location filename="../../src/courtroom.cpp" line="175"/>
+ <location filename="../../src/charselect.cpp" line="32"/>
+ <location filename="../../src/courtroom.cpp" line="153"/>
<source>Search</source>
<translation>Suche</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="35"/>
+ <location filename="../../src/charselect.cpp" line="37"/>
<source>Passworded</source>
<translation>Gesperrt</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="39"/>
+ <location filename="../../src/charselect.cpp" line="41"/>
<source>Taken</source>
<translation>Benutzt</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="231"/>
+ <location filename="../../src/charselect.cpp" line="239"/>
<source>Generating chars:
%1/%2</source>
<translation>Generiere Charaktere:
@@ -646,12 +733,12 @@ Grund: </translation>
<translation type="vanished">Konnte %1 nicht finden</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="148"/>
+ <location filename="../../src/courtroom.cpp" line="126"/>
<source>Showname</source>
<translation>Anzeigename</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="152"/>
+ <location filename="../../src/courtroom.cpp" line="130"/>
<source>Message</source>
<translation>Nachricht</translation>
</message>
@@ -660,22 +747,22 @@ Grund: </translation>
<translation type="vanished">OOC Nachricht</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="167"/>
+ <location filename="../../src/courtroom.cpp" line="145"/>
<source>Name</source>
<translation>Name</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="217"/>
+ <location filename="../../src/courtroom.cpp" line="195"/>
<source>Pre</source>
<translation>Vor</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="220"/>
+ <location filename="../../src/courtroom.cpp" line="198"/>
<source>Flip</source>
<translation>Spiegeln</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="224"/>
+ <location filename="../../src/courtroom.cpp" line="202"/>
<source>Guard</source>
<translation>Wache</translation>
</message>
@@ -684,18 +771,18 @@ Grund: </translation>
<translation type="vanished">Deaktiviere Moderatorenrufe</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="233"/>
- <location filename="../../src/courtroom.cpp" line="815"/>
+ <location filename="../../src/courtroom.cpp" line="211"/>
+ <location filename="../../src/courtroom.cpp" line="845"/>
<source>Casing</source>
<translation>Fall</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="238"/>
+ <location filename="../../src/courtroom.cpp" line="216"/>
<source>Shownames</source>
<translation>Anzeigenamen</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="241"/>
+ <location filename="../../src/courtroom.cpp" line="219"/>
<source>Immediate</source>
<translation>Keine Unterbrechung</translation>
</message>
@@ -724,17 +811,17 @@ Grund: </translation>
<translation type="vanished">Gelb</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="742"/>
+ <location filename="../../src/courtroom.cpp" line="772"/>
<source>Music</source>
<translation>Musik</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="744"/>
+ <location filename="../../src/courtroom.cpp" line="774"/>
<source>Sfx</source>
<translation>Sfx</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="746"/>
+ <location filename="../../src/courtroom.cpp" line="776"/>
<source>Blips</source>
<translation>Blips</translation>
</message>
@@ -743,53 +830,53 @@ Grund: </translation>
<translation type="vanished">Verlaufsgrenze</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="767"/>
- <location filename="../../src/courtroom.cpp" line="3475"/>
+ <location filename="../../src/courtroom.cpp" line="797"/>
+ <location filename="../../src/courtroom.cpp" line="4139"/>
<source>Server</source>
<translation>Server</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="791"/>
+ <location filename="../../src/courtroom.cpp" line="821"/>
<source>Change character</source>
<translation>Charakter ändern</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="797"/>
+ <location filename="../../src/courtroom.cpp" line="827"/>
<source>Reload theme</source>
<translation>Aussehen neu laden</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="803"/>
+ <location filename="../../src/courtroom.cpp" line="833"/>
<source>Call mod</source>
<translation>Moderator rufen</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="809"/>
+ <location filename="../../src/courtroom.cpp" line="839"/>
<source>Settings</source>
<translation>Einstellungen</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="822"/>
+ <location filename="../../src/courtroom.cpp" line="852"/>
<source>A/M</source>
<translation>A/M</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="827"/>
+ <location filename="../../src/courtroom.cpp" line="857"/>
<source>Preanim</source>
<translation>Voranimation</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="913"/>
+ <location filename="../../src/courtroom.cpp" line="956"/>
<source>Back to Lobby</source>
<translation>Zurück zur Lobby</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="1457"/>
+ <location filename="../../src/courtroom.cpp" line="1609"/>
<source>You were granted the Disable Modcalls button.</source>
<translation>Du hast nun den &quot;Modcall deaktivieren&quot; Knopf.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="2984"/>
+ <location filename="../../src/courtroom.cpp" line="3601"/>
<source>You have been banned.</source>
<translation>Du wurdest verbannt.</translation>
</message>
@@ -814,9 +901,8 @@ Grund: </translation>
<translation type="vanished">Cyan</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="274"/>
<source>% offset</source>
- <translation>% Abstand</translation>
+ <translation type="vanished">% Abstand</translation>
</message>
<message>
<source>You were granted the Guard button.</source>
@@ -831,7 +917,7 @@ Grund: </translation>
<translation type="vanished">Dies bewirkt nichts, aber egal.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3182"/>
+ <location filename="../../src/courtroom.cpp" line="3811"/>
<source>You opened the settings menu.</source>
<translation>Du hast die Einstellungen geöffnet.</translation>
</message>
@@ -844,350 +930,461 @@ Grund: </translation>
<translation type="vanished"> gepaart, wenn der andere dies auch tut.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="143"/>
+ <location filename="../../src/courtroom.cpp" line="121"/>
+ <location filename="../../src/courtroom.cpp" line="3646"/>
+ <location filename="../../src/courtroom.cpp" line="3688"/>
+ <location filename="../../src/courtroom.cpp" line="4447"/>
<source>None</source>
<translation>Keine</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="228"/>
+ <location filename="../../src/courtroom.cpp" line="206"/>
<source>Additive</source>
<translation>Hinzufügend</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="277"/>
+ <location filename="../../src/courtroom.cpp" line="254"/>
+ <source>% x offset</source>
+ <translation>% Horizontaler Abstand</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="257"/>
+ <source>% y offset</source>
+ <translation>% Vertikaler Abstand</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="260"/>
<source>To front</source>
<translation>Vorne</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="278"/>
+ <location filename="../../src/courtroom.cpp" line="261"/>
<source>To behind</source>
<translation>Hinten</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="591"/>
+ <location filename="../../src/courtroom.cpp" line="602"/>
<source>Select a character you wish to pair with.</source>
<translation>Wähle einen Charakter mit dem du gepaart sein möchtest.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="596"/>
<source>Change the percentage offset of your character&apos;s position from the center of the screen.</source>
- <translation>Ändere den Abstand des Charakters zur Mitte.</translation>
+ <translation type="vanished">Ändere den Abstand des Charakters zur Mitte.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="602"/>
+ <location filename="../../src/courtroom.cpp" line="621"/>
<source>Change the order of appearance for your character.</source>
<translation>Ändere die Reihenfolge in der die Charaktere erscheinen.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="607"/>
+ <location filename="../../src/courtroom.cpp" line="626"/>
<source>Display the list of characters to pair with.</source>
<translation>Zeigt die Liste der paarbaren Charaktere.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="665"/>
+ <location filename="../../src/courtroom.cpp" line="695"/>
<source>Oops, you&apos;re muted!</source>
<translation>Ohje, du bist stumm!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="679"/>
+ <location filename="../../src/courtroom.cpp" line="709"/>
<source>Set your character&apos;s emote to play on your next message.</source>
<translation>Setzt den Ausdruck für die nächste Nachricht.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="683"/>
+ <location filename="../../src/courtroom.cpp" line="713"/>
<source>Set your character&apos;s supplementary background.</source>
<translation>Setzt die Position des Charakters.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="689"/>
<source>Set an &apos;iniswap&apos;, or an alternative character folder to refer to from your current character.
Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/&lt;charname&gt;/iniswaps.ini</source>
- <translation type="unfinished"></translation>
+ <translation type="vanished">Setz einen &apos;iniswap&apos;, oder einen anderen Charakterordner von deinem aktuellen Charakter.
+Bearbeiten durch tippen und Enter drücken, [X] zum entfernen. Das wird in base/characters/&lt;charname&gt;/iniswaps.ini gespeichert.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="607"/>
+ <source>Change the horizontal percentage offset of your character&apos;s position from the center of the screen.</source>
+ <translation>Ändert den Hoizontalen Abstand relativ zur Mitte.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="614"/>
+ <source>Change the vertical percentage offset of your character&apos;s position from the center of the screen.</source>
+ <translation>Ändert den vertikalen Abstand relativ zur Mitte.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="698"/>
- <location filename="../../src/courtroom.cpp" line="715"/>
+ <location filename="../../src/courtroom.cpp" line="719"/>
+ <source>Set an &apos;iniswap&apos;, or an alternative character folder to refer to from your current character.
+Edit by typing and pressing Enter, [X] to remove. This saves to your base/iniswaps.ini</source>
+ <translation>Setz einen &apos;iniswap&apos;, oder einen anderen Charakterordner von deinem aktuellen Charakter.
+Bearbeiten durch tippen und Enter drücken, [X] zum entfernen. Das wird in base/iniswaps.ini gespeichert.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="728"/>
<source>Remove the currently selected iniswap from the list and return to the original character folder.</source>
- <translation type="unfinished"></translation>
+ <translation>Entfernt den aktuellen iniswap von der Liste und stellt den originalen Ordner wieder her.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="706"/>
+ <location filename="../../src/courtroom.cpp" line="736"/>
<source>Set a sound effect to play on your next &apos;Preanim&apos;. Leaving it on Default will use the emote-defined sound (if any).
Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/&lt;charname&gt;/soundlist.ini</source>
- <translation type="unfinished"></translation>
+ <translation>Wähle einen Soundeffekt der bei der nächsten &apos;Preanim&apos; gespielt wird. Lasse dies auf Standard um den emote-Sound zu verwenden.
+Bearbeiten durch tippen und Enter drücken, [X] zum entfernen. Das wird in base/characters/&lt;charname&gt;/soundlist.ini gespeichert.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="744"/>
+ <source>Remove the currently selected sound effect.</source>
+ <translation>Entfernt den aktuell ausgewählten Soundeffekt.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="722"/>
+ <location filename="../../src/courtroom.cpp" line="752"/>
<source>Choose an effect to play on your next spoken message.
The effects are defined in your theme/effects/effects.ini. Your character can define custom effects by
char.ini [Options] category, effects = &apos;miscname&apos; where it referes to misc/&lt;miscname&gt;/effects.ini to read the effects.</source>
- <translation type="unfinished"></translation>
+ <translation>Wähle einen Effekt für die nächste Nachricht.
+Die Effekte sind definiert in theme/effects/effects.ini. Dein Charakter kann eigene Effekte in der
+char.ini [Options] Kategorie, effects = &apos;miscname&apos; haben welcher dann misc/&lt;miscname&gt;/effects.ini liest.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="749"/>
+ <location filename="../../src/courtroom.cpp" line="779"/>
<source>Hold It!</source>
<translation>Moment mal!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="750"/>
- <location filename="../../src/courtroom.cpp" line="756"/>
- <location filename="../../src/courtroom.cpp" line="762"/>
+ <location filename="../../src/courtroom.cpp" line="780"/>
+ <location filename="../../src/courtroom.cpp" line="786"/>
+ <location filename="../../src/courtroom.cpp" line="792"/>
<source>When this is turned on, your next in-character message will be a shout!</source>
<translation>Wenn dies an ist, wird die Nächste Nachricht ein Zuruf!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="755"/>
+ <location filename="../../src/courtroom.cpp" line="785"/>
<source>Objection!</source>
<translation>Einspruch!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="761"/>
+ <location filename="../../src/courtroom.cpp" line="791"/>
<source>Take That!</source>
<translation>Nimm das!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="769"/>
+ <location filename="../../src/courtroom.cpp" line="799"/>
<source>Toggle between server chat and global AO2 chat.</source>
<translation>Wechselt zwischen Serverchat und AO2 Chat.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="773"/>
- <location filename="../../src/courtroom.cpp" line="777"/>
- <location filename="../../src/courtroom.cpp" line="783"/>
- <location filename="../../src/courtroom.cpp" line="787"/>
+ <location filename="../../src/courtroom.cpp" line="803"/>
+ <location filename="../../src/courtroom.cpp" line="807"/>
+ <location filename="../../src/courtroom.cpp" line="813"/>
+ <location filename="../../src/courtroom.cpp" line="817"/>
<source>This will display the animation in the viewport as soon as it is pressed.</source>
- <translation type="unfinished"></translation>
+ <translation>Dies zeigt die Animation im Spielfeld sobald es angeklickt wird.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="781"/>
+ <location filename="../../src/courtroom.cpp" line="811"/>
<source>Guilty!</source>
<translation>Schuldig!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="794"/>
+ <location filename="../../src/courtroom.cpp" line="824"/>
<source>Bring up the Character Select Screen and change your character.</source>
- <translation type="unfinished"></translation>
+ <translation>Zeige die Charakterauswahl und ändere deinen Charakter.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="800"/>
+ <location filename="../../src/courtroom.cpp" line="830"/>
<source>Refresh the theme and update all of the ui elements to match.</source>
- <translation type="unfinished"></translation>
+ <translation>Aktualisiert das Design und alle UI Elemente.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="806"/>
+ <location filename="../../src/courtroom.cpp" line="836"/>
<source>Request the attention of the current server&apos;s moderator.</source>
- <translation type="unfinished"></translation>
+ <translation>Fordere einen Moderator an.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="812"/>
+ <location filename="../../src/courtroom.cpp" line="842"/>
<source>Allows you to change various aspects of the client.</source>
- <translation type="unfinished"></translation>
+ <translation>Lässt dich verschiedene Dinge des Clients anpassen.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="818"/>
+ <location filename="../../src/courtroom.cpp" line="848"/>
<source>An interface to help you announce a case (you have to be a CM first to be able to announce cases)</source>
- <translation type="unfinished"></translation>
+ <translation>Ein Menü um einen Fall anzukündigen (du musst dafür erst CM sein)</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="824"/>
+ <location filename="../../src/courtroom.cpp" line="854"/>
<source>Switch between Areas and Music lists</source>
- <translation type="unfinished"></translation>
+ <translation>Wechsel zwischen Areal- und Musikliste</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="829"/>
+ <location filename="../../src/courtroom.cpp" line="859"/>
<source>Play a single-shot animation as defined by the emote when checked.</source>
- <translation type="unfinished"></translation>
+ <translation>Zeigt eine Animation vor dem Sprechen.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="833"/>
+ <location filename="../../src/courtroom.cpp" line="862"/>
<source>If preanim is checked, display the input text immediately as the animation plays concurrently.</source>
- <translation type="unfinished"></translation>
+ <translation>Starte sofort zu sprechen, ohne auf das Ende der Voranimation zu warten.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="837"/>
+ <location filename="../../src/courtroom.cpp" line="880"/>
<source>Mirror your character&apos;s emotes when checked.</source>
- <translation type="unfinished"></translation>
+ <translation>Spiegelt die Emotes deines Charakters.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="841"/>
+ <location filename="../../src/courtroom.cpp" line="884"/>
<source>Add text to your last spoken message when checked.</source>
- <translation type="unfinished"></translation>
+ <translation>Füge Text zu deiner letzten Nachricht hinzu.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="845"/>
+ <location filename="../../src/courtroom.cpp" line="888"/>
<source>Do not listen to mod calls when checked, preventing them from playing sounds or focusing attention on the window.</source>
- <translation type="unfinished"></translation>
+ <translation>Ignoriere Modcalls und spiel keinen Ton ab.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="849"/>
+ <location filename="../../src/courtroom.cpp" line="892"/>
<source>Lets you receive case alerts when enabled.
(You can set your preferences in the Settings!)</source>
- <translation type="unfinished"></translation>
+ <translation>Lässt dich Fallalarme erhalten.
+(Du kannst dies in den Einstellungen anpassen!)</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="854"/>
+ <location filename="../../src/courtroom.cpp" line="897"/>
<source>Display customized shownames for all users when checked.</source>
- <translation type="unfinished"></translation>
+ <translation>Zeigt selbst einstellbare Namen für alle.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="857"/>
+ <location filename="../../src/courtroom.cpp" line="900"/>
<source>Custom Shout!</source>
- <translation type="unfinished"></translation>
+ <translation>Eigener Zwischenruf!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="860"/>
+ <location filename="../../src/courtroom.cpp" line="903"/>
<source>This will display the custom character-defined animation in the viewport as soon as it is pressed.
To make one, your character&apos;s folder must contain custom.[webp/apng/gif/png] and custom.[wav/ogg/opus] sound effect</source>
- <translation type="unfinished"></translation>
+ <translation>Dies zeigt des Charakters eigenen Zwischenruf.
+Um einen zu haben muss im Charakterordner eine custom.[webp/apng/gif/png] und ein custom.[wav/ogg/opus] Soundeffekt sein</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="868"/>
+ <location filename="../../src/courtroom.cpp" line="911"/>
<source>Play realization sound and animation in the viewport on the next spoken message when checked.</source>
- <translation type="unfinished"></translation>
+ <translation>Spiele den Realisierung Sound und Animation mit der nächsten Nachricht.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="874"/>
+ <location filename="../../src/courtroom.cpp" line="917"/>
<source>Shake the screen on next spoken message when checked.</source>
- <translation type="unfinished"></translation>
+ <translation>Schüttelt den Bildschirm bei der nächsten Nachricht.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="880"/>
+ <location filename="../../src/courtroom.cpp" line="923"/>
<source>Display the list of character folders you wish to mute.</source>
- <translation type="unfinished"></translation>
+ <translation>Zeigt die Charakterliste um einen stumm zu schalten.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="884"/>
- <location filename="../../src/courtroom.cpp" line="892"/>
+ <location filename="../../src/courtroom.cpp" line="927"/>
+ <location filename="../../src/courtroom.cpp" line="935"/>
<source>Increase the health bar.</source>
- <translation type="unfinished"></translation>
+ <translation>Erhöhe die Gesundheit.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="888"/>
- <location filename="../../src/courtroom.cpp" line="896"/>
+ <location filename="../../src/courtroom.cpp" line="931"/>
+ <location filename="../../src/courtroom.cpp" line="939"/>
<source>Decrease the health bar.</source>
- <translation type="unfinished"></translation>
+ <translation>Verringere die Gesundheit.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="900"/>
+ <location filename="../../src/courtroom.cpp" line="943"/>
<source>Change the text color of the spoken message.
You can also select a part of your currently typed message and use the dropdown to change its color!</source>
- <translation type="unfinished"></translation>
+ <translation>Ändert die Textfarbe.
+Du kannst auch nur einen Teil der Nachricht auswählen und dessen Farbe ändern!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="914"/>
+ <location filename="../../src/courtroom.cpp" line="957"/>
<source>Return back to the server list.</source>
- <translation type="unfinished"></translation>
+ <translation>Zurück zur Serverliste.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="927"/>
+ <location filename="../../src/courtroom.cpp" line="970"/>
<source>Become a spectator. You won&apos;t be able to interact with the in-character screen.</source>
- <translation type="unfinished"></translation>
+ <translation>Werde ein Zuschauer. Es ist dir nicht möglich mit dem Spielfeld zu interagieren.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="1457"/>
- <location filename="../../src/courtroom.cpp" line="3343"/>
+ <location filename="../../src/courtroom.cpp" line="1609"/>
+ <location filename="../../src/courtroom.cpp" line="3998"/>
<source>CLIENT</source>
<translation>CLIENT</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3061"/>
- <location filename="../../src/courtroom.cpp" line="4479"/>
- <location filename="../../src/courtroom.cpp" line="4486"/>
+ <location filename="../../src/courtroom.cpp" line="2028"/>
+ <location filename="../../src/courtroom.cpp" line="2116"/>
+ <location filename="../../src/courtroom.cpp" line="2191"/>
+ <source>HOLD IT!</source>
+ <translation>MOMENT MAL!</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2033"/>
+ <location filename="../../src/courtroom.cpp" line="2121"/>
+ <location filename="../../src/courtroom.cpp" line="2198"/>
+ <source>OBJECTION!</source>
+ <translation>EINSPRUCH!</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2038"/>
+ <location filename="../../src/courtroom.cpp" line="2126"/>
+ <location filename="../../src/courtroom.cpp" line="2207"/>
+ <source>TAKE THAT!</source>
+ <translation>NIMM DAS!</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2050"/>
+ <location filename="../../src/courtroom.cpp" line="2138"/>
+ <location filename="../../src/courtroom.cpp" line="2227"/>
+ <source>CUSTOM OBJECTION!</source>
+ <translation>SPEZIALRUF!</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2054"/>
+ <location filename="../../src/courtroom.cpp" line="2142"/>
+ <location filename="../../src/courtroom.cpp" line="3022"/>
+ <source>shouts</source>
+ <translation>Zwischenrufe</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2065"/>
+ <location filename="../../src/courtroom.cpp" line="2152"/>
+ <source>has presented evidence</source>
+ <translation>hat Beweis präsentiert</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3018"/>
+ <location filename="../../src/courtroom.cpp" line="3679"/>
+ <location filename="../../src/courtroom.cpp" line="3680"/>
+ <source>has stopped the music</source>
+ <translation>hat die Musik angehalten</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3651"/>
+ <location filename="../../src/courtroom.cpp" line="3693"/>
+ <source>[MISSING] %1</source>
+ <translation>[FEHLEND] %1</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3683"/>
+ <location filename="../../src/courtroom.cpp" line="3684"/>
<source>has played a song</source>
<translation>spielte ein Lied</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3195"/>
+ <location filename="../../src/courtroom.cpp" line="3824"/>
<source>You will now pair up with %1 if they also choose your character in return.</source>
- <translation type="unfinished"></translation>
+ <translation>Du paarst dich nun mit %1 wenn diese deinen Charakter auch gewählt haben.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3201"/>
+ <location filename="../../src/courtroom.cpp" line="3832"/>
<source>You are no longer paired with anyone.</source>
<translation>Du bist nicht mehr gepaart.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3206"/>
+ <location filename="../../src/courtroom.cpp" line="3837"/>
<source>Are you sure you typed that well? The char ID could not be recognised.</source>
<translation>Hast du dich vertippt? Die ID konnte nicht erkannt werden.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3221"/>
+ <location filename="../../src/courtroom.cpp" line="3853"/>
+ <source>You have set your offset to %1%%.</source>
+ <translation>Dein Abstand ist auf %1%% gesetzt.</translation>
+ </message>
+ <message>
<source>You have set your offset to </source>
- <translation>Dein Abstand ist auf </translation>
+ <translation type="vanished">Dein Abstand ist auf </translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3228"/>
+ <location filename="../../src/courtroom.cpp" line="3858"/>
<source>Your offset must be between -100% and 100%!</source>
<translation>Der Abstand muss zwischen -100% und 100% liegen!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3233"/>
+ <location filename="../../src/courtroom.cpp" line="3863"/>
<source>That offset does not look like one.</source>
<translation>Das sieht nicht wie ein Abstand aus.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3239"/>
+ <location filename="../../src/courtroom.cpp" line="3876"/>
+ <source>You have set your vertical offset to %1%%.</source>
+ <translation>Du hast deinen vertikalen Abstand auf %1%% gesetzt.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3883"/>
+ <source>Your vertical offset must be between -100% and 100%!</source>
+ <translation>Dein vertikaler Abstand muss zwischen -100% und 100% sein!</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3888"/>
+ <source>That vertical offset does not look like one.</source>
+ <translation>Das sieht nicht wie ein Abstand aus.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3894"/>
<source>You switched your music and area list.</source>
<translation>Du hast zwischen Musik- und Gebitsliste umgeschaltet.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3246"/>
+ <location filename="../../src/courtroom.cpp" line="3901"/>
<source>You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this.</source>
<translation>Du hast Funktionen erzwungen die der Server eventuell nicht unterstützt. Möglicherweise wirst du nicht mehr sprechen können.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3260"/>
+ <location filename="../../src/courtroom.cpp" line="3915"/>
<source>Your pre-animations interrupt again.</source>
<translation>Deine Voranimation unterbrechen nun Text.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3263"/>
+ <location filename="../../src/courtroom.cpp" line="3918"/>
<source>Your pre-animations will not interrupt text.</source>
<translation>Deine Voranimation unterbrechen Text nicht.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3274"/>
+ <location filename="../../src/courtroom.cpp" line="3929"/>
<source>Couldn&apos;t open chatlog.txt to write into.</source>
<translation>Konnte chatlog.txt nicht öffnen.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3287"/>
+ <location filename="../../src/courtroom.cpp" line="3942"/>
<source>The IC chatlog has been saved.</source>
<translation>Der IC Verlauf wurde gespeichert.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3300"/>
+ <location filename="../../src/courtroom.cpp" line="3955"/>
<source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely the case file you&apos;re looking for can&apos;t be found in there.</source>
<translation>Du hattest keinen &apos;base/cases&apos; Ordner! Ich hab ihn nun angelegt aber bedenke das er leer sein wird.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3315"/>
+ <location filename="../../src/courtroom.cpp" line="3970"/>
<source>You need to give a filename to load (extension not needed)! Make sure that it is in the `base/cases/` folder, and that it is a correctly formatted ini.
Cases you can load: %1</source>
<translation>Du musst einen Dateinamen angeben (ohne .ini). Stelle sicher das er im &apos;base/cases&apos; Ordner ist und das er korrekt formatiert ist.
Verfügbare Fälle: %1</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3343"/>
+ <location filename="../../src/courtroom.cpp" line="3999"/>
<source>Case made by %1.</source>
<translation>Fall von %1.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3353"/>
+ <location filename="../../src/courtroom.cpp" line="4009"/>
<source>Navigate to %1 for the CM doc.</source>
<translation>Gehe zu %1 für das CM Dokument.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3367"/>
- <location filename="../../src/courtroom.cpp" line="3369"/>
- <location filename="../../src/evidence.cpp" line="761"/>
- <location filename="../../src/evidence.cpp" line="763"/>
+ <location filename="../../src/courtroom.cpp" line="4031"/>
+ <location filename="../../src/courtroom.cpp" line="4033"/>
+ <location filename="../../src/evidence.cpp" line="765"/>
+ <location filename="../../src/evidence.cpp" line="767"/>
<source>UNKNOWN</source>
<translation>UNBEKANNT</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3377"/>
+ <location filename="../../src/courtroom.cpp" line="4041"/>
<source>Your case &quot;%1&quot; was loaded!</source>
<translation>Dein Fall &quot;%1&quot; wurde geladen!</translation>
</message>
@@ -1198,7 +1395,7 @@ Cases you can load: </source>
Verfügbare Fälle: </translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3327"/>
+ <location filename="../../src/courtroom.cpp" line="3982"/>
<source>Too many arguments to load a case! You only need one filename, without extension.</source>
<translation>Zu viele Argumente! Du brauchst nur den Dateinamen, ohne Erweiterung.</translation>
</message>
@@ -1223,83 +1420,93 @@ Verfügbare Fälle: </translation>
<translation type="vanished">&quot; wurde geladen!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3389"/>
+ <location filename="../../src/courtroom.cpp" line="4053"/>
<source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely that you somehow deleted it.</source>
<translation>Du hattest keinen &apos;base/cases&apos; Ordner! Ich hab ihn nun angelegt aber bedenke das er leer sein wird.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3404"/>
+ <location filename="../../src/courtroom.cpp" line="4068"/>
<source>You need to give a filename to save (extension not needed) and the courtroom status!</source>
<translation>Du musst einen Dateinamen (ohne Erweiterung) angebenn, sowie den Gebietsstatus!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3414"/>
+ <location filename="../../src/courtroom.cpp" line="4078"/>
<source>Too many arguments to save a case! You only need a filename without extension and the courtroom status!</source>
<translation>Zu viele Argumente! Du brauchst nur den Dateinamen, ohne Erweiterung sowie den Gebietsstatus!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3441"/>
+ <location filename="../../src/courtroom.cpp" line="4105"/>
<source>Succesfully saved, edit doc and cmdoc link on the ini!</source>
<translation>Erfolgreich gespeichert!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3468"/>
+ <location filename="../../src/courtroom.cpp" line="4132"/>
<source>Master</source>
<translation>Master</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3968"/>
+ <location filename="../../src/courtroom.cpp" line="4647"/>
+ <source>Stop Current Song</source>
+ <translation>Lied stoppen</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="4648"/>
+ <source>Play Random Song</source>
+ <translation>Zufälliges Lied</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="4650"/>
<source>Expand All Categories</source>
<translation>Alle Kategorien erweitern</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3970"/>
+ <location filename="../../src/courtroom.cpp" line="4652"/>
<source>Collapse All Categories</source>
<translation>Alle Kategorien verstecken</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3974"/>
+ <location filename="../../src/courtroom.cpp" line="4656"/>
<source>Fade Out Previous</source>
- <translation type="unfinished"></translation>
+ <translation>Vorheriges ausblenden</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3980"/>
+ <location filename="../../src/courtroom.cpp" line="4662"/>
<source>Fade In</source>
- <translation type="unfinished"></translation>
+ <translation>Einblenden</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3986"/>
+ <location filename="../../src/courtroom.cpp" line="4668"/>
<source>Synchronize</source>
- <translation type="unfinished"></translation>
+ <translation>Synchronisieren</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4256"/>
+ <location filename="../../src/courtroom.cpp" line="5001"/>
<source>Default</source>
<translation>Standard</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4417"/>
+ <location filename="../../src/courtroom.cpp" line="5184"/>
<source>Reason:</source>
<translation>Grund:</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4418"/>
+ <location filename="../../src/courtroom.cpp" line="5185"/>
<source>Call Moderator</source>
<translation>Moderator rufen</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4426"/>
- <location filename="../../src/courtroom.cpp" line="4430"/>
+ <location filename="../../src/courtroom.cpp" line="5193"/>
+ <location filename="../../src/courtroom.cpp" line="5197"/>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4426"/>
+ <location filename="../../src/courtroom.cpp" line="5193"/>
<source>You must provide a reason.</source>
<translation>Du musst einen Grund angeben.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4430"/>
+ <location filename="../../src/courtroom.cpp" line="5197"/>
<source>The message is too long.</source>
<translation>Die Nachricht ist zu lang.</translation>
</message>
@@ -1315,139 +1522,143 @@ Verfügbare Fälle: </translation>
<message>
<location filename="../../src/evidence.cpp" line="17"/>
<source>Present this piece of evidence to everyone on your next spoken message</source>
- <translation type="unfinished"></translation>
+ <translation>Präsentiere dieses Beweisstück allen in der nächsten Nachricht</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="24"/>
<source>Save evidence to an .ini file.</source>
- <translation type="unfinished"></translation>
+ <translation>Speichere Beweise in einer .ini Datei.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="26"/>
<source>Load evidence from an .ini file.</source>
- <translation type="unfinished"></translation>
+ <translation>Lade Beweise aus einer .ini Datei.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="31"/>
<source>Destroy this piece of evidence</source>
- <translation type="unfinished"></translation>
+ <translation>Zerstöre dieses Beweisstück</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="37"/>
<source>Close the evidence display/editing overlay.
You will be prompted if there&apos;s any unsaved changes.</source>
- <translation type="unfinished"></translation>
+ <translation>Schließe das Beweisfenster.
+Du wirst gefragt wenn es ungespeicherte Änderungen gibt.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="40"/>
<source>Save any changes made to this piece of evidence and send them to server.</source>
- <translation type="unfinished"></translation>
+ <translation>Speichert alle Änderungen an diesem Beweisstück und schickt sie zum Server.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="48"/>
<source>Double-click to edit. Press [X] to update your changes.</source>
- <translation type="unfinished"></translation>
+ <translation>Doppelklick zum bearbeiten. Klicke [X] um die Änderungen zu übernehmen.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="104"/>
<source>Bring up the Evidence screen.</source>
- <translation type="unfinished"></translation>
+ <translation>Zeigt die Beweisliste.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="147"/>
<source>Switch evidence to private inventory.</source>
- <translation type="unfinished"></translation>
+ <translation>Wechselt zum eigenen Inventar.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="151"/>
<source>Switch evidence to global inventory.</source>
- <translation type="unfinished"></translation>
+ <translation>Wechselt zum globalen Inventar.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="158"/>
- <location filename="../../src/evidence.cpp" line="617"/>
+ <location filename="../../src/evidence.cpp" line="619"/>
<source>Transfer evidence to private inventory.</source>
- <translation type="unfinished"></translation>
+ <translation>Übertrage Beweisstück zum eigenen Inventar.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="163"/>
- <location filename="../../src/evidence.cpp" line="627"/>
+ <location filename="../../src/evidence.cpp" line="629"/>
<source>Transfer evidence to global inventory.</source>
- <translation type="unfinished"></translation>
+ <translation>Übertrage Beweisstück zum globalen Inventar.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="263"/>
+ <location filename="../../src/evidence.cpp" line="264"/>
<source>The piece of evidence you&apos;ve been editing has changed.</source>
- <translation type="unfinished"></translation>
+ <translation>Das Beweisstück das du bearbeitet hast hat sich verändert.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="264"/>
+ <location filename="../../src/evidence.cpp" line="265"/>
<source>Do you wish to keep your changes?</source>
- <translation type="unfinished"></translation>
+ <translation>Möchtest du deine Änderungen behalten?</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="265"/>
+ <location filename="../../src/evidence.cpp" line="266"/>
<source>Name: %1
Image: %2
Description:
%3</source>
- <translation type="unfinished"></translation>
+ <translation>Name: %1
+Bild: %2
+Beschreibung:
+%3</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="387"/>
+ <location filename="../../src/evidence.cpp" line="388"/>
<source>Images (*.png)</source>
<translation>Bilder (*.png)</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="456"/>
- <location filename="../../src/evidence.cpp" line="460"/>
- <location filename="../../src/evidence.cpp" line="463"/>
+ <location filename="../../src/evidence.cpp" line="457"/>
+ <location filename="../../src/evidence.cpp" line="461"/>
+ <location filename="../../src/evidence.cpp" line="464"/>
<source>Double-click to edit...</source>
- <translation type="unfinished"></translation>
+ <translation>Doppelklick zum bearbeiten...</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="478"/>
+ <location filename="../../src/evidence.cpp" line="479"/>
<source>Add new evidence...</source>
<translation>Neues Beweisstück...</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="556"/>
+ <location filename="../../src/evidence.cpp" line="558"/>
<source>Evidence has been modified.</source>
- <translation type="unfinished"></translation>
+ <translation>Beweise wurden verändert.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="557"/>
+ <location filename="../../src/evidence.cpp" line="559"/>
<source>Do you want to save your changes?</source>
- <translation type="unfinished"></translation>
+ <translation>Möchtest du deine Änderungen speichen?</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="619"/>
+ <location filename="../../src/evidence.cpp" line="621"/>
<source>Current evidence is global. Click to switch to private.</source>
- <translation type="unfinished"></translation>
+ <translation>Beweise sind global. Klicken um zu eigenen zu wechseln.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="629"/>
+ <location filename="../../src/evidence.cpp" line="631"/>
<source>Current evidence is private. Click to switch to global.</source>
- <translation type="unfinished"></translation>
+ <translation>Beweise sind die eigenen. Klicken um zu global zu wechseln.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="659"/>
+ <location filename="../../src/evidence.cpp" line="662"/>
<source>&quot;%1&quot; has been transferred.</source>
- <translation type="unfinished"></translation>
+ <translation>&quot;%1&quot; wurde übertragen.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="721"/>
+ <location filename="../../src/evidence.cpp" line="725"/>
<source>Save Inventory</source>
- <translation type="unfinished"></translation>
+ <translation>Inventar speichen</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="721"/>
- <location filename="../../src/evidence.cpp" line="747"/>
+ <location filename="../../src/evidence.cpp" line="725"/>
+ <location filename="../../src/evidence.cpp" line="751"/>
<source>Ini Files (*.ini)</source>
<translation>Ini Dateien (*.ini)</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="747"/>
+ <location filename="../../src/evidence.cpp" line="751"/>
<source>Open Inventory</source>
<translation>Inventar öffnen</translation>
</message>
@@ -1482,59 +1693,73 @@ Description:
<context>
<name>Lobby</name>
<message>
- <location filename="../../src/lobby.cpp" line="12"/>
+ <location filename="../../src/lobby.cpp" line="14"/>
<source>Attorney Online 2</source>
<translation>Attorney Online 2</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="31"/>
+ <location filename="../../src/lobby.cpp" line="34"/>
<source>Search</source>
<translation>Suche</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="39"/>
+ <location filename="../../src/lobby.cpp" line="42"/>
<source>Name</source>
<translation>Name</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="94"/>
+ <location filename="../../src/lobby.cpp" line="97"/>
<source>It doesn&apos;t look like your client is set up correctly.
Did you download all resources correctly from tiny.cc/getao, including the large &apos;base&apos; folder?</source>
<translation>Dein Client ist nicht korrekt eingerichtet.
Hast du ALLES von tiny.cc/getao heruntergeladen und entpackt, auch den großen &apos;base&apos; Ordner?</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="123"/>
+ <location filename="../../src/lobby.cpp" line="126"/>
<source>Version: %1</source>
<translation>Version: %1</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="129"/>
+ <location filename="../../src/lobby.cpp" line="132"/>
<source>Settings</source>
<translation>Einstellungen</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="132"/>
+ <location filename="../../src/lobby.cpp" line="135"/>
<source>Allows you to change various aspects of the client.</source>
<translation>Erlaubt es verschiedene Aspekte des Clients zu ändern.</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="176"/>
+ <location filename="../../src/lobby.cpp" line="179"/>
<source>Loading</source>
<translation>Laden</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="180"/>
+ <location filename="../../src/lobby.cpp" line="183"/>
<source>Cancel</source>
<translation>Abbrechen</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="360"/>
+ <location filename="../../src/lobby.cpp" line="365"/>
+ <source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Client development:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;QA testing:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!&lt;p&gt;The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.&lt;p&gt;Running on Qt version %2 with the BASS audio engine.&lt;br&gt;APNG plugin loaded: %3&lt;p&gt;Built on %4</source>
+ <translation>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;Der Gerichtsdrama Simulator&lt;p&gt;&lt;b&gt;Quelltext:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Leitende Entwicklung:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Cliententwicklung:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;Qualitätssicherung:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Danksagungen:&lt;/b&gt;&lt;br&gt;CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, und FanatSors (AO1); Serverbetreiber, Gamemaster, Fallersteller, Inhaltsersteller und die ganze AO2 Community!&lt;p&gt;Das Attorney Online networked visual novel Projekt ist copyright (c) 2016-2020 Attorney Online Entwickler. Unter Open-Source Lizenz. Alle anderen Inhalte sind Eigentum ihrer Besitzer.&lt;p&gt;Läuft auf Qt version %2 mit der BASS Audio Engine.&lt;br&gt;APNG plugin geladen: %3&lt;p&gt;Built on %4</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="397"/>
+ <source>Yes</source>
+ <translation>Ja</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="397"/>
+ <source>No</source>
+ <translation>Nein</translation>
+ </message>
+ <message>
<source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;2.8 Major Release development:&lt;/b&gt;&lt;br&gt;Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;2.8 Quality Assurance:&lt;/b&gt;&lt;br&gt;WillDean, Captain N, Mr M, Riel, Seimmet, Fury McFlurry,CedricDewitt, Chewable Tablets, Fantos, Futugaze,Geck, Minx, Pandae, Sierra, CrazyJC, CaseyMayCazy,GreenBowers, Robotic Overlord, Veritas, Gin-Gi&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy, the AO2 community, server hosts, game masters,case makers, content creators and players!</source>
- <translation>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;Der Gerichtsdrama Simulator&lt;p&gt;&lt;b&gt;Quelltext:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Leitende Entwicklung:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;Version 2.8 Entwicklung:&lt;/b&gt;&lt;br&gt;Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;2.8 Qualitätskontrolle:&lt;/b&gt;&lt;br&gt;WillDean, Captain N, Mr M, Riel, Seimmet, Fury McFlurry,CedricDewitt, Chewable Tablets, Fantos, Futugaze,Geck, Minx, Pandae, Sierra, CrazyJC, CaseyMayCazy,GreenBowers, Robotic Overlord, Veritas, Gin-Gi&lt;p&gt;&lt;b&gt;Danksagungen:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy, die AO2 Community, Serverbetreiber, Gamemaster, Fallersteller, Inhaltersteller und Spieler!</translation>
+ <translation type="vanished">&lt;h2&gt;Attorney Online %1&lt;/h2&gt;Der Gerichtsdrama Simulator&lt;p&gt;&lt;b&gt;Quelltext:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Leitende Entwicklung:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;Version 2.8 Entwicklung:&lt;/b&gt;&lt;br&gt;Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;2.8 Qualitätskontrolle:&lt;/b&gt;&lt;br&gt;WillDean, Captain N, Mr M, Riel, Seimmet, Fury McFlurry,CedricDewitt, Chewable Tablets, Fantos, Futugaze,Geck, Minx, Pandae, Sierra, CrazyJC, CaseyMayCazy,GreenBowers, Robotic Overlord, Veritas, Gin-Gi&lt;p&gt;&lt;b&gt;Danksagungen:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy, die AO2 Community, Serverbetreiber, Gamemaster, Fallersteller, Inhaltersteller und Spieler!</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="380"/>
+ <location filename="../../src/lobby.cpp" line="399"/>
<source>About</source>
<translation>Über</translation>
</message>
@@ -1547,7 +1772,7 @@ Hast du ALLES von tiny.cc/getao heruntergeladen und entpackt, auch den großen &
<translation type="vanished">&lt;h2&gt;Attorney Online %1&lt;/h2&gt;Der Gerichtsdrama Simulator&lt;p&gt;&lt;b&gt;Quelltext:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Leitende Entwicklung:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;Danksagungen:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="521"/>
+ <location filename="../../src/lobby.cpp" line="542"/>
<source>Online: %1/%2</source>
<translation>Online: %1/%2</translation>
</message>
@@ -1592,8 +1817,8 @@ Noevain
Cronnicossy</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="142"/>
- <location filename="../../src/lobby.cpp" line="418"/>
+ <location filename="../../src/lobby.cpp" line="145"/>
+ <location filename="../../src/lobby.cpp" line="437"/>
<source>Offline</source>
<translation>Offline</translation>
</message>
@@ -1608,25 +1833,24 @@ Cronnicossy</translation>
<translation>UNBEKANNT</translation>
</message>
<message>
- <location filename="../../src/chatlogpiece.cpp" line="55"/>
<source> has played a song: </source>
- <translation> hat ein Lied gespielt: </translation>
+ <translation type="vanished"> hat ein Lied gespielt: </translation>
</message>
</context>
<context>
<name>debug_functions</name>
<message>
- <location filename="../../src/debug_functions.cpp" line="10"/>
+ <location filename="../../src/debug_functions.cpp" line="13"/>
<source>Error: %1</source>
<translation>Fehler: %1</translation>
</message>
<message>
- <location filename="../../src/debug_functions.cpp" line="13"/>
+ <location filename="../../src/debug_functions.cpp" line="16"/>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
- <location filename="../../src/debug_functions.cpp" line="25"/>
+ <location filename="../../src/debug_functions.cpp" line="29"/>
<source>Notice</source>
<translation>Hinweis</translation>
</message>
diff --git a/resource/translations/ao_en.qm b/resource/translations/ao_en.qm
index 9dad8dff..937ea3e7 100644
--- a/resource/translations/ao_en.qm
+++ b/resource/translations/ao_en.qm
Binary files differ
diff --git a/resource/translations/ao_en.ts b/resource/translations/ao_en.ts
index 8d21c99b..718f66e6 100644
--- a/resource/translations/ao_en.ts
+++ b/resource/translations/ao_en.ts
@@ -4,72 +4,64 @@
<context>
<name>AOApplication</name>
<message>
- <location filename="../../src/aoapplication.cpp" line="129"/>
+ <location filename="../../src/aoapplication.cpp" line="133"/>
<source>Disconnected from server.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aoapplication.cpp" line="152"/>
+ <location filename="../../src/aoapplication.cpp" line="156"/>
<source>Error connecting to master server. Will try again in %1 seconds.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aoapplication.cpp" line="157"/>
+ <location filename="../../src/aoapplication.cpp" line="161"/>
<source>There was an error connecting to the master server.
We deploy multiple master servers to mitigate any possible downtime, but the client appears to have exhausted all possible methods of finding and connecting to one.
Please check your Internet connection and firewall, and please try again.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="94"/>
+ <location filename="../../src/packet_distribution.cpp" line="93"/>
<source>Outdated version! Your version: %1
Please go to aceattorneyonline.com to update.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="235"/>
+ <location filename="../../src/packet_distribution.cpp" line="263"/>
<source>Attorney Online 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="263"/>
+ <location filename="../../src/packet_distribution.cpp" line="289"/>
<source>Loading</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="363"/>
- <source>Loading evidence:
-%1/%2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/packet_distribution.cpp" line="398"/>
- <location filename="../../src/packet_distribution.cpp" line="492"/>
+ <location filename="../../src/packet_distribution.cpp" line="374"/>
<source>Loading music:
%1/%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="316"/>
- <location filename="../../src/packet_distribution.cpp" line="465"/>
+ <location filename="../../src/packet_distribution.cpp" line="346"/>
<source>Loading chars:
%1/%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="674"/>
+ <location filename="../../src/packet_distribution.cpp" line="578"/>
<source>You have been kicked from the server.
Reason: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="682"/>
+ <location filename="../../src/packet_distribution.cpp" line="586"/>
<source>You have been banned from the server.
Reason: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="690"/>
+ <location filename="../../src/packet_distribution.cpp" line="594"/>
<source>You are banned on this server.
Reason: %1</source>
<translation type="unfinished"></translation>
@@ -156,917 +148,1102 @@ Reason: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="133"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="231"/>
<source>Default username:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="135"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="233"/>
<source>Your OOC name will be automatically set to this value when you join a server.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="148"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="246"/>
<source>Custom shownames:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="150"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="248"/>
<source>Gives the default value for the in-game &apos;Custom shownames&apos; tickbox, which in turn determines whether the client should display custom in-character names.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="170"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="268"/>
<source>Backup MS:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="172"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="270"/>
<source>If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="185"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="283"/>
<source>Discord:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="187"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="285"/>
<source>Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="200"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="298"/>
<source>Language:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="202"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="300"/>
<source>Sets the language if you don&apos;t want to use your system language.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="324"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="438"/>
<source>Callwords</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="351"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="465"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!&lt;br&gt;Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="361"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="475"/>
<source>Audio</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="375"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="489"/>
<source>Audio device:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="376"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="490"/>
<source>Sets the audio device for all sounds.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="419"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="523"/>
<source>Music:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="434"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="538"/>
<source>SFX:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="450"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="554"/>
<source>Blips:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="452"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="556"/>
<source>Sets the volume of the blips, the talking sound effects.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="474"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="578"/>
<source>Blip rate:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="476"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="580"/>
<source>Sets the delay between playing the blip sounds.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="491"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="595"/>
<source>Blank blips:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="493"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="597"/>
<source>If true, the game will play a blip sound even when a space is &apos;being said&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="505"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="609"/>
<source>Enable Looping SFX:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="506"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="610"/>
<source>If true, the game will allow looping sound effects to play on preanimations.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="518"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="622"/>
<source>Kill Music On Objection:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="208"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="306"/>
<source> - Keep current setting</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="220"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="125"/>
+ <source>Log newline:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="127"/>
+ <source>If ticked, new messages will appear separated, with the message coming on the next line after the name. When unticked, it displays it as &apos;name: message&apos;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="140"/>
+ <source>Log margin:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="141"/>
+ <source>The distance in pixels between each entry in the IC log. Default: 0.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="155"/>
+ <source>Log timestamp:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="157"/>
+ <source>If ticked, log will contain a timestamp in UTC before the name.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="168"/>
+ <source>Log IC actions:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="170"/>
+ <source>If ticked, log will show IC actions such as shouting and presenting evidence.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="182"/>
+ <source>Text Stay Time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="183"/>
+ <source>Minimum amount of time (in miliseconds) an IC message must stay on screen before the next IC message is shown, acting as a &apos;queue&apos;. Set to 0 to disable this behavior.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="197"/>
+ <source>Desynchronize IC Logs:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="199"/>
+ <source>If ticked, log will show messages as-received, while viewport will parse according to the queue (Text Stay Time).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="210"/>
+ <source>Instant Objection:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="212"/>
+ <source>If Text Stay Time is more than 0, instant objection will skip queued messages instead of waiting to catch up.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="320"/>
<source>Allow Screenshake:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="222"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="322"/>
<source>Allows screenshaking. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="234"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="334"/>
<source>Allow Effects:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="236"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="336"/>
<source>Allows screen effects. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="248"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="348"/>
<source>Network Frame Effects:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="249"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="349"/>
<source>Send screen-shaking, flashes and sounds as defined in the char.ini over the network. Only works for servers that support this functionality.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="262"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="362"/>
<source>Colors in IC Log:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="264"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="364"/>
<source>Use the markup colors in the server IC chatlog.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="275"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="375"/>
<source>Sticky Sounds:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="277"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="377"/>
<source>Turn this on to prevent the sound dropdown from clearing the sound after playing it.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="289"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="389"/>
<source>Sticky Effects:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="291"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="391"/>
<source>Turn this on to prevent the effects dropdown from clearing the effect after playing it.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="304"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="404"/>
<source>Sticky Preanims:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="306"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="406"/>
<source>Turn this on to prevent preanimation checkbox from clearing after playing the emote.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../src/aooptionsdialog.cpp" line="418"/>
+ <source>Custom Chatboxes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../../src/aooptionsdialog.cpp" line="420"/>
+ <source>Turn this on to allow characters to define their own custom chat box designs.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="524"/>
<source>Sets the music&apos;s default volume.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="436"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="540"/>
<source>Sets the SFX&apos;s default volume. Interjections and actual sound effects count as &apos;SFX&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="484"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="588"/>
<source>Play a blip sound &quot;once per every X symbols&quot;, where X is the blip rate.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="520"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="624"/>
<source>If true, AO2 will stop the music for you when you or someone else does &apos;Objection!&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="532"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="636"/>
<source>Casing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="549"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="653"/>
<source>This server supports case alerts.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="552"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="656"/>
<source>This server does not support case alerts.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="553"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="657"/>
<source>Pretty self-explanatory.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="562"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="666"/>
<source>Casing:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="564"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="668"/>
<source>If checked, you will get alerts about case announcements.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="580"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="684"/>
<source>Defense:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="581"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="685"/>
<source>If checked, you will get alerts about case announcements if a defense spot is open.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="595"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="699"/>
<source>Prosecution:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="597"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="701"/>
<source>If checked, you will get alerts about case announcements if a prosecutor spot is open.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="611"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="715"/>
<source>Judge:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="612"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="716"/>
<source>If checked, you will get alerts about case announcements if the judge spot is open.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="626"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="730"/>
<source>Juror:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="627"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="731"/>
<source>If checked, you will get alerts about case announcements if a juror spot is open.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="641"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="745"/>
<source>Stenographer:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="643"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="747"/>
<source>If checked, you will get alerts about case announcements if a stenographer spot is open.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="657"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="761"/>
<source>CM:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="659"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="763"/>
<source>If checked, you will appear amongst the potential CMs on the server.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="673"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="777"/>
<source>Hosting cases:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="675"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="779"/>
<source>If you&apos;re a CM, enter what cases you are willing to host.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="793"/>
+ <source>Automatic Logging:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="795"/>
+ <source>If checked, all logs will be automatically written in the /logs folder.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>Courtroom</name>
<message>
- <location filename="../../src/charselect.cpp" line="21"/>
+ <location filename="../../src/charselect.cpp" line="23"/>
<source>Password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="27"/>
+ <location filename="../../src/charselect.cpp" line="29"/>
<source>Spectator</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="30"/>
- <location filename="../../src/courtroom.cpp" line="175"/>
+ <location filename="../../src/charselect.cpp" line="32"/>
+ <location filename="../../src/courtroom.cpp" line="153"/>
<source>Search</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="35"/>
+ <location filename="../../src/charselect.cpp" line="37"/>
<source>Passworded</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="39"/>
+ <location filename="../../src/charselect.cpp" line="41"/>
<source>Taken</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="231"/>
+ <location filename="../../src/charselect.cpp" line="239"/>
<source>Generating chars:
%1/%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="148"/>
+ <location filename="../../src/courtroom.cpp" line="126"/>
<source>Showname</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="152"/>
+ <location filename="../../src/courtroom.cpp" line="130"/>
<source>Message</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="167"/>
+ <location filename="../../src/courtroom.cpp" line="145"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="217"/>
+ <location filename="../../src/courtroom.cpp" line="195"/>
<source>Pre</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="220"/>
+ <location filename="../../src/courtroom.cpp" line="198"/>
<source>Flip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="233"/>
- <location filename="../../src/courtroom.cpp" line="815"/>
+ <location filename="../../src/courtroom.cpp" line="211"/>
+ <location filename="../../src/courtroom.cpp" line="847"/>
<source>Casing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="238"/>
+ <location filename="../../src/courtroom.cpp" line="216"/>
<source>Shownames</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="241"/>
+ <location filename="../../src/courtroom.cpp" line="219"/>
<source>Immediate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="1457"/>
+ <location filename="../../src/courtroom.cpp" line="254"/>
+ <source>% x offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="257"/>
+ <source>% y offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="609"/>
+ <source>Change the horizontal percentage offset of your character&apos;s position from the center of the screen.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="616"/>
+ <source>Change the vertical percentage offset of your character&apos;s position from the center of the screen.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="721"/>
+ <source>Set an &apos;iniswap&apos;, or an alternative character folder to refer to from your current character.
+Edit by typing and pressing Enter, [X] to remove. This saves to your base/iniswaps.ini</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="1615"/>
<source>You were granted the Disable Modcalls button.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3315"/>
+ <location filename="../../src/courtroom.cpp" line="3856"/>
+ <source>You have set your offset to %1%%.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3973"/>
<source>You need to give a filename to load (extension not needed)! Make sure that it is in the `base/cases/` folder, and that it is a correctly formatted ini.
Cases you can load: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3343"/>
+ <location filename="../../src/courtroom.cpp" line="4002"/>
<source>Case made by %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3353"/>
+ <location filename="../../src/courtroom.cpp" line="4012"/>
<source>Navigate to %1 for the CM doc.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3377"/>
+ <location filename="../../src/courtroom.cpp" line="4044"/>
<source>Your case &quot;%1&quot; was loaded!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="767"/>
- <location filename="../../src/courtroom.cpp" line="3475"/>
+ <location filename="../../src/courtroom.cpp" line="799"/>
+ <location filename="../../src/courtroom.cpp" line="4142"/>
<source>Server</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="913"/>
+ <location filename="../../src/courtroom.cpp" line="958"/>
<source>Back to Lobby</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="274"/>
- <source>% offset</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/courtroom.cpp" line="742"/>
+ <location filename="../../src/courtroom.cpp" line="774"/>
<source>Music</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="744"/>
+ <location filename="../../src/courtroom.cpp" line="776"/>
<source>Sfx</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="746"/>
+ <location filename="../../src/courtroom.cpp" line="778"/>
<source>Blips</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="791"/>
+ <location filename="../../src/courtroom.cpp" line="823"/>
<source>Change character</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="797"/>
+ <location filename="../../src/courtroom.cpp" line="829"/>
<source>Reload theme</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="803"/>
+ <location filename="../../src/courtroom.cpp" line="835"/>
<source>Call mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="809"/>
+ <location filename="../../src/courtroom.cpp" line="841"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="822"/>
+ <location filename="../../src/courtroom.cpp" line="854"/>
<source>A/M</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="827"/>
+ <location filename="../../src/courtroom.cpp" line="859"/>
<source>Preanim</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="2984"/>
+ <location filename="../../src/courtroom.cpp" line="3607"/>
<source>You have been banned.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3182"/>
+ <location filename="../../src/courtroom.cpp" line="3814"/>
<source>You opened the settings menu.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="143"/>
+ <location filename="../../src/courtroom.cpp" line="121"/>
+ <location filename="../../src/courtroom.cpp" line="3652"/>
+ <location filename="../../src/courtroom.cpp" line="3694"/>
+ <location filename="../../src/courtroom.cpp" line="4415"/>
<source>None</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="224"/>
+ <location filename="../../src/courtroom.cpp" line="202"/>
<source>Guard</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="228"/>
+ <location filename="../../src/courtroom.cpp" line="206"/>
<source>Additive</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="277"/>
+ <location filename="../../src/courtroom.cpp" line="260"/>
<source>To front</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="278"/>
+ <location filename="../../src/courtroom.cpp" line="261"/>
<source>To behind</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="591"/>
+ <location filename="../../src/courtroom.cpp" line="604"/>
<source>Select a character you wish to pair with.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="596"/>
- <source>Change the percentage offset of your character&apos;s position from the center of the screen.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/courtroom.cpp" line="602"/>
+ <location filename="../../src/courtroom.cpp" line="623"/>
<source>Change the order of appearance for your character.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="607"/>
+ <location filename="../../src/courtroom.cpp" line="628"/>
<source>Display the list of characters to pair with.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="665"/>
+ <location filename="../../src/courtroom.cpp" line="697"/>
<source>Oops, you&apos;re muted!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="679"/>
+ <location filename="../../src/courtroom.cpp" line="711"/>
<source>Set your character&apos;s emote to play on your next message.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="683"/>
+ <location filename="../../src/courtroom.cpp" line="715"/>
<source>Set your character&apos;s supplementary background.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="689"/>
- <source>Set an &apos;iniswap&apos;, or an alternative character folder to refer to from your current character.
-Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/&lt;charname&gt;/iniswaps.ini</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/courtroom.cpp" line="698"/>
- <location filename="../../src/courtroom.cpp" line="715"/>
+ <location filename="../../src/courtroom.cpp" line="730"/>
<source>Remove the currently selected iniswap from the list and return to the original character folder.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="706"/>
+ <location filename="../../src/courtroom.cpp" line="738"/>
<source>Set a sound effect to play on your next &apos;Preanim&apos;. Leaving it on Default will use the emote-defined sound (if any).
Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/&lt;charname&gt;/soundlist.ini</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="722"/>
+ <location filename="../../src/courtroom.cpp" line="746"/>
+ <source>Remove the currently selected sound effect.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="754"/>
<source>Choose an effect to play on your next spoken message.
The effects are defined in your theme/effects/effects.ini. Your character can define custom effects by
char.ini [Options] category, effects = &apos;miscname&apos; where it referes to misc/&lt;miscname&gt;/effects.ini to read the effects.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="749"/>
+ <location filename="../../src/courtroom.cpp" line="781"/>
<source>Hold It!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="750"/>
- <location filename="../../src/courtroom.cpp" line="756"/>
- <location filename="../../src/courtroom.cpp" line="762"/>
+ <location filename="../../src/courtroom.cpp" line="782"/>
+ <location filename="../../src/courtroom.cpp" line="788"/>
+ <location filename="../../src/courtroom.cpp" line="794"/>
<source>When this is turned on, your next in-character message will be a shout!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="755"/>
+ <location filename="../../src/courtroom.cpp" line="787"/>
<source>Objection!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="761"/>
+ <location filename="../../src/courtroom.cpp" line="793"/>
<source>Take That!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="769"/>
+ <location filename="../../src/courtroom.cpp" line="801"/>
<source>Toggle between server chat and global AO2 chat.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="773"/>
- <location filename="../../src/courtroom.cpp" line="777"/>
- <location filename="../../src/courtroom.cpp" line="783"/>
- <location filename="../../src/courtroom.cpp" line="787"/>
+ <location filename="../../src/courtroom.cpp" line="805"/>
+ <location filename="../../src/courtroom.cpp" line="809"/>
+ <location filename="../../src/courtroom.cpp" line="815"/>
+ <location filename="../../src/courtroom.cpp" line="819"/>
<source>This will display the animation in the viewport as soon as it is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="781"/>
+ <location filename="../../src/courtroom.cpp" line="813"/>
<source>Guilty!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="794"/>
+ <location filename="../../src/courtroom.cpp" line="826"/>
<source>Bring up the Character Select Screen and change your character.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="800"/>
+ <location filename="../../src/courtroom.cpp" line="832"/>
<source>Refresh the theme and update all of the ui elements to match.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="806"/>
+ <location filename="../../src/courtroom.cpp" line="838"/>
<source>Request the attention of the current server&apos;s moderator.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="812"/>
+ <location filename="../../src/courtroom.cpp" line="844"/>
<source>Allows you to change various aspects of the client.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="818"/>
+ <location filename="../../src/courtroom.cpp" line="850"/>
<source>An interface to help you announce a case (you have to be a CM first to be able to announce cases)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="824"/>
+ <location filename="../../src/courtroom.cpp" line="856"/>
<source>Switch between Areas and Music lists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="829"/>
+ <location filename="../../src/courtroom.cpp" line="861"/>
<source>Play a single-shot animation as defined by the emote when checked.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="833"/>
+ <location filename="../../src/courtroom.cpp" line="864"/>
<source>If preanim is checked, display the input text immediately as the animation plays concurrently.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="837"/>
+ <location filename="../../src/courtroom.cpp" line="882"/>
<source>Mirror your character&apos;s emotes when checked.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="841"/>
+ <location filename="../../src/courtroom.cpp" line="886"/>
<source>Add text to your last spoken message when checked.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="845"/>
+ <location filename="../../src/courtroom.cpp" line="890"/>
<source>Do not listen to mod calls when checked, preventing them from playing sounds or focusing attention on the window.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="849"/>
+ <location filename="../../src/courtroom.cpp" line="894"/>
<source>Lets you receive case alerts when enabled.
(You can set your preferences in the Settings!)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="854"/>
+ <location filename="../../src/courtroom.cpp" line="899"/>
<source>Display customized shownames for all users when checked.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="857"/>
+ <location filename="../../src/courtroom.cpp" line="902"/>
<source>Custom Shout!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="860"/>
+ <location filename="../../src/courtroom.cpp" line="905"/>
<source>This will display the custom character-defined animation in the viewport as soon as it is pressed.
To make one, your character&apos;s folder must contain custom.[webp/apng/gif/png] and custom.[wav/ogg/opus] sound effect</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="868"/>
+ <location filename="../../src/courtroom.cpp" line="913"/>
<source>Play realization sound and animation in the viewport on the next spoken message when checked.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="874"/>
+ <location filename="../../src/courtroom.cpp" line="919"/>
<source>Shake the screen on next spoken message when checked.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="880"/>
+ <location filename="../../src/courtroom.cpp" line="925"/>
<source>Display the list of character folders you wish to mute.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="884"/>
- <location filename="../../src/courtroom.cpp" line="892"/>
+ <location filename="../../src/courtroom.cpp" line="929"/>
+ <location filename="../../src/courtroom.cpp" line="937"/>
<source>Increase the health bar.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="888"/>
- <location filename="../../src/courtroom.cpp" line="896"/>
+ <location filename="../../src/courtroom.cpp" line="933"/>
+ <location filename="../../src/courtroom.cpp" line="941"/>
<source>Decrease the health bar.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="900"/>
+ <location filename="../../src/courtroom.cpp" line="945"/>
<source>Change the text color of the spoken message.
You can also select a part of your currently typed message and use the dropdown to change its color!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="914"/>
+ <location filename="../../src/courtroom.cpp" line="959"/>
<source>Return back to the server list.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="927"/>
+ <location filename="../../src/courtroom.cpp" line="972"/>
<source>Become a spectator. You won&apos;t be able to interact with the in-character screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="1457"/>
- <location filename="../../src/courtroom.cpp" line="3343"/>
+ <location filename="../../src/courtroom.cpp" line="1615"/>
+ <location filename="../../src/courtroom.cpp" line="4001"/>
<source>CLIENT</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3061"/>
- <location filename="../../src/courtroom.cpp" line="4479"/>
- <location filename="../../src/courtroom.cpp" line="4486"/>
+ <location filename="../../src/courtroom.cpp" line="2034"/>
+ <location filename="../../src/courtroom.cpp" line="2122"/>
+ <location filename="../../src/courtroom.cpp" line="2197"/>
+ <source>HOLD IT!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2039"/>
+ <location filename="../../src/courtroom.cpp" line="2127"/>
+ <location filename="../../src/courtroom.cpp" line="2204"/>
+ <source>OBJECTION!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2044"/>
+ <location filename="../../src/courtroom.cpp" line="2132"/>
+ <location filename="../../src/courtroom.cpp" line="2213"/>
+ <source>TAKE THAT!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2056"/>
+ <location filename="../../src/courtroom.cpp" line="2144"/>
+ <location filename="../../src/courtroom.cpp" line="2233"/>
+ <source>CUSTOM OBJECTION!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2060"/>
+ <location filename="../../src/courtroom.cpp" line="2148"/>
+ <location filename="../../src/courtroom.cpp" line="3028"/>
+ <source>shouts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2071"/>
+ <location filename="../../src/courtroom.cpp" line="2158"/>
+ <source>has presented evidence</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3024"/>
+ <location filename="../../src/courtroom.cpp" line="3685"/>
+ <location filename="../../src/courtroom.cpp" line="3686"/>
+ <source>has stopped the music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3657"/>
+ <location filename="../../src/courtroom.cpp" line="3699"/>
+ <source>[MISSING] %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3689"/>
+ <location filename="../../src/courtroom.cpp" line="3690"/>
<source>has played a song</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3195"/>
+ <location filename="../../src/courtroom.cpp" line="3827"/>
<source>You will now pair up with %1 if they also choose your character in return.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3201"/>
+ <location filename="../../src/courtroom.cpp" line="3835"/>
<source>You are no longer paired with anyone.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3206"/>
+ <location filename="../../src/courtroom.cpp" line="3840"/>
<source>Are you sure you typed that well? The char ID could not be recognised.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3221"/>
- <source>You have set your offset to </source>
+ <location filename="../../src/courtroom.cpp" line="3861"/>
+ <source>Your offset must be between -100% and 100%!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3228"/>
- <source>Your offset must be between -100% and 100%!</source>
+ <location filename="../../src/courtroom.cpp" line="3866"/>
+ <source>That offset does not look like one.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3233"/>
- <source>That offset does not look like one.</source>
+ <location filename="../../src/courtroom.cpp" line="3879"/>
+ <source>You have set your vertical offset to %1%%.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3886"/>
+ <source>Your vertical offset must be between -100% and 100%!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3239"/>
+ <location filename="../../src/courtroom.cpp" line="3891"/>
+ <source>That vertical offset does not look like one.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3897"/>
<source>You switched your music and area list.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3246"/>
+ <location filename="../../src/courtroom.cpp" line="3904"/>
<source>You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3260"/>
+ <location filename="../../src/courtroom.cpp" line="3918"/>
<source>Your pre-animations interrupt again.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3263"/>
+ <location filename="../../src/courtroom.cpp" line="3921"/>
<source>Your pre-animations will not interrupt text.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3274"/>
+ <location filename="../../src/courtroom.cpp" line="3932"/>
<source>Couldn&apos;t open chatlog.txt to write into.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3287"/>
+ <location filename="../../src/courtroom.cpp" line="3945"/>
<source>The IC chatlog has been saved.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3300"/>
+ <location filename="../../src/courtroom.cpp" line="3958"/>
<source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely the case file you&apos;re looking for can&apos;t be found in there.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3327"/>
+ <location filename="../../src/courtroom.cpp" line="3985"/>
<source>Too many arguments to load a case! You only need one filename, without extension.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3367"/>
- <location filename="../../src/courtroom.cpp" line="3369"/>
- <location filename="../../src/evidence.cpp" line="761"/>
- <location filename="../../src/evidence.cpp" line="763"/>
+ <location filename="../../src/courtroom.cpp" line="4034"/>
+ <location filename="../../src/courtroom.cpp" line="4036"/>
+ <location filename="../../src/evidence.cpp" line="765"/>
+ <location filename="../../src/evidence.cpp" line="767"/>
<source>UNKNOWN</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3389"/>
+ <location filename="../../src/courtroom.cpp" line="4056"/>
<source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely that you somehow deleted it.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3404"/>
+ <location filename="../../src/courtroom.cpp" line="4071"/>
<source>You need to give a filename to save (extension not needed) and the courtroom status!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3414"/>
+ <location filename="../../src/courtroom.cpp" line="4081"/>
<source>Too many arguments to save a case! You only need a filename without extension and the courtroom status!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3441"/>
+ <location filename="../../src/courtroom.cpp" line="4108"/>
<source>Succesfully saved, edit doc and cmdoc link on the ini!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3468"/>
+ <location filename="../../src/courtroom.cpp" line="4135"/>
<source>Master</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3968"/>
+ <location filename="../../src/courtroom.cpp" line="4617"/>
+ <source>Stop Current Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="4618"/>
+ <source>Play Random Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="4620"/>
<source>Expand All Categories</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3970"/>
+ <location filename="../../src/courtroom.cpp" line="4622"/>
<source>Collapse All Categories</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3974"/>
+ <location filename="../../src/courtroom.cpp" line="4626"/>
<source>Fade Out Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3980"/>
+ <location filename="../../src/courtroom.cpp" line="4632"/>
<source>Fade In</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3986"/>
+ <location filename="../../src/courtroom.cpp" line="4638"/>
<source>Synchronize</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4256"/>
+ <location filename="../../src/courtroom.cpp" line="4970"/>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4417"/>
+ <location filename="../../src/courtroom.cpp" line="5153"/>
<source>Reason:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4418"/>
+ <location filename="../../src/courtroom.cpp" line="5154"/>
<source>Call Moderator</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4426"/>
- <location filename="../../src/courtroom.cpp" line="4430"/>
+ <location filename="../../src/courtroom.cpp" line="5162"/>
+ <location filename="../../src/courtroom.cpp" line="5166"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4426"/>
+ <location filename="../../src/courtroom.cpp" line="5162"/>
<source>You must provide a reason.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4430"/>
+ <location filename="../../src/courtroom.cpp" line="5166"/>
<source>The message is too long.</source>
<translation type="unfinished"></translation>
</message>
@@ -1128,28 +1305,28 @@ You will be prompted if there&apos;s any unsaved changes.</source>
</message>
<message>
<location filename="../../src/evidence.cpp" line="158"/>
- <location filename="../../src/evidence.cpp" line="617"/>
+ <location filename="../../src/evidence.cpp" line="619"/>
<source>Transfer evidence to private inventory.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="163"/>
- <location filename="../../src/evidence.cpp" line="627"/>
+ <location filename="../../src/evidence.cpp" line="629"/>
<source>Transfer evidence to global inventory.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="263"/>
+ <location filename="../../src/evidence.cpp" line="264"/>
<source>The piece of evidence you&apos;ve been editing has changed.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="264"/>
+ <location filename="../../src/evidence.cpp" line="265"/>
<source>Do you wish to keep your changes?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="265"/>
+ <location filename="../../src/evidence.cpp" line="266"/>
<source>Name: %1
Image: %2
Description:
@@ -1157,130 +1334,155 @@ Description:
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="387"/>
+ <location filename="../../src/evidence.cpp" line="388"/>
<source>Images (*.png)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="456"/>
- <location filename="../../src/evidence.cpp" line="460"/>
- <location filename="../../src/evidence.cpp" line="463"/>
+ <location filename="../../src/evidence.cpp" line="457"/>
+ <location filename="../../src/evidence.cpp" line="461"/>
+ <location filename="../../src/evidence.cpp" line="464"/>
<source>Double-click to edit...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="478"/>
+ <location filename="../../src/evidence.cpp" line="479"/>
<source>Add new evidence...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="556"/>
+ <location filename="../../src/evidence.cpp" line="558"/>
<source>Evidence has been modified.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="557"/>
+ <location filename="../../src/evidence.cpp" line="559"/>
<source>Do you want to save your changes?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="619"/>
+ <location filename="../../src/evidence.cpp" line="621"/>
<source>Current evidence is global. Click to switch to private.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="629"/>
+ <location filename="../../src/evidence.cpp" line="631"/>
<source>Current evidence is private. Click to switch to global.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="659"/>
+ <location filename="../../src/evidence.cpp" line="662"/>
<source>&quot;%1&quot; has been transferred.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="721"/>
+ <location filename="../../src/evidence.cpp" line="725"/>
<source>Save Inventory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="721"/>
- <location filename="../../src/evidence.cpp" line="747"/>
+ <location filename="../../src/evidence.cpp" line="725"/>
+ <location filename="../../src/evidence.cpp" line="751"/>
<source>Ini Files (*.ini)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="747"/>
+ <location filename="../../src/evidence.cpp" line="751"/>
<source>Open Inventory</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>DemoServer</name>
+ <message>
+ <location filename="../../src/demoserver.cpp" line="38"/>
+ <location filename="../../src/demoserver.cpp" line="152"/>
+ <source>Load Demo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/demoserver.cpp" line="38"/>
+ <location filename="../../src/demoserver.cpp" line="152"/>
+ <source>Demo Files (*.demo)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Lobby</name>
<message>
- <location filename="../../src/lobby.cpp" line="12"/>
+ <location filename="../../src/lobby.cpp" line="15"/>
<source>Attorney Online 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="31"/>
+ <location filename="../../src/lobby.cpp" line="35"/>
<source>Search</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="39"/>
+ <location filename="../../src/lobby.cpp" line="43"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="94"/>
+ <location filename="../../src/lobby.cpp" line="98"/>
<source>It doesn&apos;t look like your client is set up correctly.
Did you download all resources correctly from tiny.cc/getao, including the large &apos;base&apos; folder?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="123"/>
+ <location filename="../../src/lobby.cpp" line="127"/>
<source>Version: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="129"/>
+ <location filename="../../src/lobby.cpp" line="133"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="132"/>
+ <location filename="../../src/lobby.cpp" line="136"/>
<source>Allows you to change various aspects of the client.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="176"/>
+ <location filename="../../src/lobby.cpp" line="180"/>
<source>Loading</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="180"/>
+ <location filename="../../src/lobby.cpp" line="184"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="360"/>
- <source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;2.8 Major Release development:&lt;/b&gt;&lt;br&gt;Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;2.8 Quality Assurance:&lt;/b&gt;&lt;br&gt;WillDean, Captain N, Mr M, Riel, Seimmet, Fury McFlurry,CedricDewitt, Chewable Tablets, Fantos, Futugaze,Geck, Minx, Pandae, Sierra, CrazyJC, CaseyMayCazy,GreenBowers, Robotic Overlord, Veritas, Gin-Gi&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy, the AO2 community, server hosts, game masters,case makers, content creators and players!</source>
+ <location filename="../../src/lobby.cpp" line="366"/>
+ <source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Client development:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;QA testing:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!&lt;p&gt;The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.&lt;p&gt;Running on Qt version %2 with the BASS audio engine.&lt;br&gt;APNG plugin loaded: %3&lt;p&gt;Built on %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="398"/>
+ <source>Yes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="398"/>
+ <source>No</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="380"/>
+ <location filename="../../src/lobby.cpp" line="400"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="521"/>
+ <location filename="../../src/lobby.cpp" line="551"/>
<source>Online: %1/%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="142"/>
- <location filename="../../src/lobby.cpp" line="418"/>
+ <location filename="../../src/lobby.cpp" line="146"/>
+ <location filename="../../src/lobby.cpp" line="438"/>
<source>Offline</source>
<translation type="unfinished"></translation>
</message>
@@ -1294,26 +1496,21 @@ Did you download all resources correctly from tiny.cc/getao, including the large
<source>UNKNOWN</source>
<translation type="unfinished"></translation>
</message>
- <message>
- <location filename="../../src/chatlogpiece.cpp" line="55"/>
- <source> has played a song: </source>
- <translation type="unfinished"></translation>
- </message>
</context>
<context>
<name>debug_functions</name>
<message>
- <location filename="../../src/debug_functions.cpp" line="10"/>
+ <location filename="../../src/debug_functions.cpp" line="13"/>
<source>Error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/debug_functions.cpp" line="13"/>
+ <location filename="../../src/debug_functions.cpp" line="16"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/debug_functions.cpp" line="25"/>
+ <location filename="../../src/debug_functions.cpp" line="29"/>
<source>Notice</source>
<translation type="unfinished"></translation>
</message>
diff --git a/resource/translations/ao_es.qm b/resource/translations/ao_es.qm
index 7b5e6f25..6963455d 100644
--- a/resource/translations/ao_es.qm
+++ b/resource/translations/ao_es.qm
Binary files differ
diff --git a/resource/translations/ao_es.ts b/resource/translations/ao_es.ts
index 36cc653c..10b8e432 100644
--- a/resource/translations/ao_es.ts
+++ b/resource/translations/ao_es.ts
@@ -1,20 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.0" language="es">
+<TS version="2.1" language="es">
<context>
<name>AOApplication</name>
<message>
- <location filename="../../src/aoapplication.cpp" line="129"/>
+ <location filename="../../src/aoapplication.cpp" line="133"/>
<source>Disconnected from server.</source>
<translation>Desconectado del servidor.</translation>
</message>
<message>
- <location filename="../../src/aoapplication.cpp" line="152"/>
+ <location filename="../../src/aoapplication.cpp" line="156"/>
<source>Error connecting to master server. Will try again in %1 seconds.</source>
<translation>Error al conectarse a la lista de servidores. Se intentará nuevamente en %1 segundos.</translation>
</message>
<message>
- <location filename="../../src/aoapplication.cpp" line="157"/>
+ <location filename="../../src/aoapplication.cpp" line="161"/>
<source>There was an error connecting to the master server.
We deploy multiple master servers to mitigate any possible downtime, but the client appears to have exhausted all possible methods of finding and connecting to one.
Please check your Internet connection and firewall, and please try again.</source>
@@ -22,7 +22,7 @@ Please check your Internet connection and firewall, and please try again.</sourc
<translation>Hubo un error al obtener la lista de servidores. Verifique su conexión a Internet y firewall, y vuelva a intentarlo.</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="94"/>
+ <location filename="../../src/packet_distribution.cpp" line="93"/>
<source>Outdated version! Your version: %1
Please go to aceattorneyonline.com to update.</source>
<translation>¡Versión desactualizada! Su versión: %1
@@ -35,54 +35,51 @@ Have a nice day.</source>
Que tengas un buen día.</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="253"/>
+ <location filename="../../src/packet_distribution.cpp" line="263"/>
<source>Attorney Online 2</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="281"/>
+ <location filename="../../src/packet_distribution.cpp" line="289"/>
<source>Loading</source>
<translation>Cargando</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="384"/>
<source>Loading evidence:
%1/%2</source>
- <translation>Cargando evidencia:
+ <translation type="vanished">Cargando evidencia:
%1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="419"/>
- <location filename="../../src/packet_distribution.cpp" line="513"/>
+ <location filename="../../src/packet_distribution.cpp" line="374"/>
<source>Loading music:
%1/%2</source>
<translation>Cargando música:
%1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="337"/>
- <location filename="../../src/packet_distribution.cpp" line="486"/>
+ <location filename="../../src/packet_distribution.cpp" line="346"/>
<source>Loading chars:
%1/%2</source>
<translation>Cargando personajes:
%1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="696"/>
+ <location filename="../../src/packet_distribution.cpp" line="578"/>
<source>You have been kicked from the server.
Reason: %1</source>
<translation>Has sido expulsado del servidor.
Razón: %1</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="704"/>
+ <location filename="../../src/packet_distribution.cpp" line="586"/>
<source>You have been banned from the server.
Reason: %1</source>
<translation>Has sido bloqueado de este servidor.
Razón: %1</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="712"/>
+ <location filename="../../src/packet_distribution.cpp" line="594"/>
<source>You are banned on this server.
Reason: %1</source>
<translation>Has sido bloqueado en este servidor.
@@ -216,42 +213,82 @@ Razón: </translation>
<translation>Si está marcado, el registro contendrá una marca de tiempo en UTC antes del nombre.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="176"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="168"/>
+ <source>Log IC actions:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="170"/>
+ <source>If ticked, log will show IC actions such as shouting and presenting evidence.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="182"/>
+ <source>Text Stay Time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="183"/>
+ <source>Minimum amount of time (in miliseconds) an IC message must stay on screen before the next IC message is shown, acting as a &apos;queue&apos;. Set to 0 to disable this behavior.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="197"/>
+ <source>Desynchronize IC Logs:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="199"/>
+ <source>If ticked, log will show messages as-received, while viewport will parse according to the queue (Text Stay Time).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="210"/>
+ <source>Instant Objection:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="212"/>
+ <source>If Text Stay Time is more than 0, instant objection will skip queued messages instead of waiting to catch up.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="231"/>
<source>Default username:</source>
<translation>Usuario predeterminado:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="178"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="233"/>
<source>Your OOC name will be automatically set to this value when you join a server.</source>
<translation>Su nombre OOC se establecerá automáticamente a este cuando se una a un servidor.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="191"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="246"/>
<source>Custom shownames:</source>
<translation>Mostrar nombres:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="193"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="248"/>
<source>Gives the default value for the in-game &apos;Custom shownames&apos; tickbox, which in turn determines whether the client should display custom in-character names.</source>
<translation>Activa la casilla &apos;Mostrar nombres&apos; de forma predeterminada en el juego, que a su vez determina si el cliente debe mostrar nombres personalizados en los personajes.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="213"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="268"/>
<source>Backup MS:</source>
<translation>Master SV de respaldo:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="215"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="270"/>
<source>If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address.</source>
<translation>Si la lista de servidores predeterminada falla, el juego probará la dirección proporcionada aquí.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="228"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="283"/>
<source>Discord:</source>
<translation>Discord:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="230"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="285"/>
<source>Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for.</source>
<translation>Permite a otros en Discord ver en qué servidor estás, qué personaje juegas y cuánto tiempo has estado jugando.</translation>
</message>
@@ -264,12 +301,12 @@ Razón: </translation>
<translation type="obsolete">Permite el movimiento de la pantalla y el parpadeo. Desactive esto si tiene inquietudes o problemas con la fotosensibilidad y/o convulsiones.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="243"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="298"/>
<source>Language:</source>
<translation>Idioma:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="245"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="300"/>
<source>Sets the language if you don&apos;t want to use your system language.</source>
<translation>Establece el idioma si no desea utilizar el idioma de su sistema.</translation>
</message>
@@ -278,47 +315,47 @@ Razón: </translation>
<translation type="obsolete">Habilítelo para agregar una pequeña pausa en los signos de puntuación.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="383"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="438"/>
<source>Callwords</source>
<translation>Palabras clave</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="410"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="465"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!&lt;br&gt;Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Ingrese tantas palabras de llamada como desee.&lt;br&gt;Esto no distingue entre mayúsculas y minúsculas. ¡Asegúrese de dejar cada palabra en su propia línea!&lt;br&gt;No deje una línea con un espacio al final; recibirá una alerta cada vez que alguien use un espacio en sus mensajes.&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="420"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="475"/>
<source>Audio</source>
<translation>Audio</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="434"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="489"/>
<source>Audio device:</source>
<translation>Dispositivo:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="435"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="490"/>
<source>Sets the audio device for all sounds.</source>
<translation>Establece el dispositivo de audio.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="468"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="523"/>
<source>Music:</source>
<translation>Música:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="469"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="524"/>
<source>Sets the music&apos;s default volume.</source>
<translation>Establece el volumen predeterminado de la música.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="483"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="538"/>
<source>SFX:</source>
<translation>SFX:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="485"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="540"/>
<source>Sets the SFX&apos;s default volume. Interjections and actual sound effects count as &apos;SFX&apos;.</source>
<translation>Establece el volumen predeterminado de SFX. Las interjecciones y los efectos de sonido reales cuentan como &apos;SFX&apos;.</translation>
</message>
@@ -347,47 +384,47 @@ Razón: </translation>
<translation type="obsolete">Establece el volumen predeterminado para sonidos SFX, como las interjecciones y otros efectos de sonido de personajes.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="499"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="554"/>
<source>Blips:</source>
<translation>Blips:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="501"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="556"/>
<source>Sets the volume of the blips, the talking sound effects.</source>
<translation>Establece el volumen de los blips, el sonido al hablar.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="523"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="578"/>
<source>Blip rate:</source>
<translation>Tasa de blips:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="525"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="580"/>
<source>Sets the delay between playing the blip sounds.</source>
<translation>Establece el retraso entre la reproducción de los sonidos blip.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="540"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="595"/>
<source>Blank blips:</source>
<translation>Blips en blanco:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="542"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="597"/>
<source>If true, the game will play a blip sound even when a space is &apos;being said&apos;.</source>
<translation>Si está marcada, el juego reproducirá un sonido blip incluso cuando se &apos;dice&apos; un espacio.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="554"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="609"/>
<source>Enable Looping SFX:</source>
<translation>Habilitar repetición de SFX:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="555"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="610"/>
<source>If true, the game will allow looping sound effects to play on preanimations.</source>
<translation>Si está habilitado, el juego permitirá que se reproduzcan efectos de sonido en bucle en preanimaciones.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="567"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="622"/>
<source>Kill Music On Objection:</source>
<translation>Parar la música al objetar:</translation>
</message>
@@ -396,197 +433,197 @@ Razón: </translation>
<translation type="obsolete">Si está habilitado, el juego detendrá la música cuando alguien haga una objeción, como en los juegos.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="251"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="306"/>
<source> - Keep current setting</source>
<translation> - Mantener la configuración actual</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="265"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="320"/>
<source>Allow Screenshake:</source>
<translation>Permitir screenshake:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="267"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="322"/>
<source>Allows screenshaking. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source>
<translation>Permite el movimiento de la pantalla (ADVERTENCIA: esto podría inducir convulsiones debido a imágenes parpadeantes).</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="279"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="334"/>
<source>Allow Effects:</source>
<translation>Permitir efectos:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="281"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="336"/>
<source>Allows screen effects. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source>
<translation>Permite efectos de pantalla (ADVERTENCIA: esto podría inducir convulsiones debido a imágenes parpadeantes).</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="293"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="348"/>
<source>Network Frame Effects:</source>
<translation>Enviar efectos al servidor:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="294"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="349"/>
<source>Send screen-shaking, flashes and sounds as defined in the char.ini over the network. Only works for servers that support this functionality.</source>
<translation>Envíe temblores de pantalla, destellos y sonidos como se define en char.ini a través de la red. Solo funciona para servidores que admiten esta funcionalidad.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="307"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="362"/>
<source>Colors in IC Log:</source>
<translation>Colores en el registro IC:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="309"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="364"/>
<source>Use the markup colors in the server IC chatlog.</source>
<translation>Permite colores en el chat IC del servidor.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="320"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="375"/>
<source>Sticky Sounds:</source>
<translation>Mantener sonidos:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="322"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="377"/>
<source>Turn this on to prevent the sound dropdown from clearing the sound after playing it.</source>
<translation>Actívelo para evitar que el menú desplegable de sonido borre el sonido después de reproducirlo.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="334"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="389"/>
<source>Sticky Effects:</source>
<translation>Mantener efectos:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="336"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="391"/>
<source>Turn this on to prevent the effects dropdown from clearing the effect after playing it.</source>
<translation>Actívelo para evitar que el menú desplegable de efectos elimine el efecto después de reproducirlo.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="349"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="404"/>
<source>Sticky Preanims:</source>
<translation>Mantener preanims:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="351"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="406"/>
<source>Turn this on to prevent preanimation checkbox from clearing after playing the emote.</source>
<translation>Actívelo para evitar que la casilla preanimation se desactive después de reproducir el emote.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="363"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="418"/>
<source>Custom Chatboxes:</source>
<translation>Chatboxes personalizados:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="365"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="420"/>
<source>Turn this on to allow characters to define their own custom chat box designs.</source>
<translation>Actívelo para permitir que los personajes definan sus propios diseños de cuadros de chat personalizados.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="533"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="588"/>
<source>Play a blip sound &quot;once per every X symbols&quot;, where X is the blip rate.</source>
<translation>Reproduce un sonido de blip &quot;una vez por cada X símbolos&quot;, donde X es la tasa de blip.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="569"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="624"/>
<source>If true, AO2 will stop the music for you when you or someone else does &apos;Objection!&apos;.</source>
<translation>Si es activado, AO2 detendrá la música por ti cuando tú u otra persona hagan un &apos;¡Protesto!&apos;.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="581"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="636"/>
<source>Casing</source>
<translation>Caso</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="598"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="653"/>
<source>This server supports case alerts.</source>
<translation>Este servidor admite alertas de casos.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="601"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="656"/>
<source>This server does not support case alerts.</source>
<translation>Este servidor no admite alertas de casos.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="602"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="657"/>
<source>Pretty self-explanatory.</source>
<translation>Bastante autoexplicativo.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="611"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="666"/>
<source>Casing:</source>
<translation>Caso:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="613"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="668"/>
<source>If checked, you will get alerts about case announcements.</source>
<translation>Si está marcado, recibirá anuncios de casos.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="629"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="684"/>
<source>Defense:</source>
<translation>Abogado:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="630"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="685"/>
<source>If checked, you will get alerts about case announcements if a defense spot is open.</source>
<translation>Si está marcado, recibirá alertas sobre anuncios de casos si hay un lugar de abogado libre.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="644"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="699"/>
<source>Prosecution:</source>
<translation>Fiscal:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="646"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="701"/>
<source>If checked, you will get alerts about case announcements if a prosecutor spot is open.</source>
<translation>Si está marcada, recibirá alertas sobre anuncios de casos si hay un puesto de fiscal libre.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="660"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="715"/>
<source>Judge:</source>
<translation>Juez:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="661"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="716"/>
<source>If checked, you will get alerts about case announcements if the judge spot is open.</source>
<translation>Si está marcado, recibirá alertas sobre anuncios de casos si el puesto de juez está libre.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="675"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="730"/>
<source>Juror:</source>
<translation>Jurado:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="676"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="731"/>
<source>If checked, you will get alerts about case announcements if a juror spot is open.</source>
<translation>Si está marcado, recibirá alertas sobre anuncios de casos si hay un puesto de jurado libre.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="690"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="745"/>
<source>Stenographer:</source>
<translation>Taquígrafo:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="692"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="747"/>
<source>If checked, you will get alerts about case announcements if a stenographer spot is open.</source>
<translation>Si está marcado, recibirá alertas sobre anuncios de casos si hay un lugar de taquígrafo libre.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="706"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="761"/>
<source>CM:</source>
<translation>CM:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="708"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="763"/>
<source>If checked, you will appear amongst the potential CMs on the server.</source>
<translation>Si está marcado, aparecerá entre los posibles CM en el servidor.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="738"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="793"/>
<source>Automatic Logging:</source>
<translation>Registro automático:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="740"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="795"/>
<source>If checked, all logs will be automatically written in the /logs folder.</source>
<translation>Si está marcado, todos los registros se guardarán automáticamente en la carpeta logs.</translation>
</message>
@@ -599,12 +636,12 @@ Razón: </translation>
<translation type="obsolete">Si está marcado, aparecerá entre los posibles testigos en el servidor.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="722"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="777"/>
<source>Hosting cases:</source>
<translation>Casos:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="724"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="779"/>
<source>If you&apos;re a CM, enter what cases you are willing to host.</source>
<translation>Si eres un CM, ingresa qué casos estás dispuesto a organizar.</translation>
</message>
@@ -648,29 +685,29 @@ Razón: </translation>
<context>
<name>Courtroom</name>
<message>
- <location filename="../../src/charselect.cpp" line="21"/>
+ <location filename="../../src/charselect.cpp" line="23"/>
<source>Password</source>
<translation>Contraseña</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="27"/>
+ <location filename="../../src/charselect.cpp" line="29"/>
<source>Spectator</source>
<translation>Espectador</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="30"/>
- <location filename="../../src/courtroom.cpp" line="144"/>
+ <location filename="../../src/charselect.cpp" line="32"/>
+ <location filename="../../src/courtroom.cpp" line="153"/>
<source>Search</source>
<translation>Buscar</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="35"/>
+ <location filename="../../src/charselect.cpp" line="37"/>
<source>Passworded</source>
<translatorcomment>A translation wouldn&apos;t fit because of the shitty theme system.</translatorcomment>
<translation></translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="39"/>
+ <location filename="../../src/charselect.cpp" line="41"/>
<source>Taken</source>
<translation>En uso</translation>
</message>
@@ -679,7 +716,7 @@ Razón: </translation>
<translation type="obsolete">No se pudo encontrar %1</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="236"/>
+ <location filename="../../src/charselect.cpp" line="239"/>
<source>Generating chars:
%1/%2</source>
<translation>Generando personajes:
@@ -692,53 +729,53 @@ Razón: </translation>
</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="117"/>
+ <location filename="../../src/courtroom.cpp" line="126"/>
<source>Showname</source>
<translatorcomment>A translation wouldn&apos;t fit because of the shitty theme system.</translatorcomment>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="121"/>
+ <location filename="../../src/courtroom.cpp" line="130"/>
<source>Message</source>
<translation>Mensaje</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="136"/>
+ <location filename="../../src/courtroom.cpp" line="145"/>
<source>Name</source>
<translation>Nombre</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="186"/>
+ <location filename="../../src/courtroom.cpp" line="195"/>
<source>Pre</source>
<translatorcomment>A translation wouldn&apos;t fit because of the shitty theme system.</translatorcomment>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="189"/>
+ <location filename="../../src/courtroom.cpp" line="198"/>
<source>Flip</source>
<translatorcomment>A translation wouldn&apos;t fit because of the shitty theme system.</translatorcomment>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="193"/>
+ <location filename="../../src/courtroom.cpp" line="202"/>
<source>Guard</source>
<translation>Guardia</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="202"/>
- <location filename="../../src/courtroom.cpp" line="804"/>
+ <location filename="../../src/courtroom.cpp" line="211"/>
+ <location filename="../../src/courtroom.cpp" line="847"/>
<source>Casing</source>
<translatorcomment>This could be translated as &apos;caso&apos; and it wouldn&apos;t get cut, but there are so many other buttons that can&apos;t be translated on the courtroom window that might as well leave this also untranslated so it&apos;s at least consistent.</translatorcomment>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="207"/>
+ <location filename="../../src/courtroom.cpp" line="216"/>
<source>Shownames</source>
<translatorcomment>A translation wouldn&apos;t fit because of the shitty theme system.</translatorcomment>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="210"/>
+ <location filename="../../src/courtroom.cpp" line="219"/>
<source>Immediate</source>
<translatorcomment>A translation wouldn&apos;t fit because of the shitty theme system.</translatorcomment>
<translation></translation>
@@ -780,68 +817,67 @@ Razón: </translation>
<translation type="obsolete">Cian</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="245"/>
<source>% offset</source>
- <translation>% desplazamiento</translation>
+ <translation type="vanished">% desplazamiento</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="731"/>
+ <location filename="../../src/courtroom.cpp" line="774"/>
<source>Music</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="733"/>
+ <location filename="../../src/courtroom.cpp" line="776"/>
<source>Sfx</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="735"/>
+ <location filename="../../src/courtroom.cpp" line="778"/>
<source>Blips</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="780"/>
+ <location filename="../../src/courtroom.cpp" line="823"/>
<source>Change character</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="786"/>
+ <location filename="../../src/courtroom.cpp" line="829"/>
<source>Reload theme</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="792"/>
+ <location filename="../../src/courtroom.cpp" line="835"/>
<source>Call mod</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="798"/>
+ <location filename="../../src/courtroom.cpp" line="841"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="811"/>
+ <location filename="../../src/courtroom.cpp" line="854"/>
<source>A/M</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="816"/>
+ <location filename="../../src/courtroom.cpp" line="859"/>
<source>Preanim</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="902"/>
+ <location filename="../../src/courtroom.cpp" line="958"/>
<source>Back to Lobby</source>
<translatorcomment>&apos;Volver al lobby&apos; got cut, changed to just Lobby</translatorcomment>
<translation>Lobby</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="1514"/>
+ <location filename="../../src/courtroom.cpp" line="1615"/>
<source>You were granted the Disable Modcalls button.</source>
<translation>Se le concedió el botón para deshabilitar llamadas a moderadores.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3094"/>
+ <location filename="../../src/courtroom.cpp" line="3607"/>
<source>You have been banned.</source>
<translation>Has sido vetado.</translation>
</message>
@@ -854,7 +890,7 @@ Razón: </translation>
<translation type="obsolete">Esto no hace nada, pero ahí lo tienes.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3289"/>
+ <location filename="../../src/courtroom.cpp" line="3814"/>
<source>You opened the settings menu.</source>
<translation>Abriste el menú de configuración.</translation>
</message>
@@ -867,82 +903,113 @@ Razón: </translation>
<translation type="obsolete"> si ellos también eligen a tu personaje a cambio.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="112"/>
+ <location filename="../../src/courtroom.cpp" line="121"/>
+ <location filename="../../src/courtroom.cpp" line="3652"/>
+ <location filename="../../src/courtroom.cpp" line="3694"/>
+ <location filename="../../src/courtroom.cpp" line="4415"/>
<source>None</source>
<translation>Nada</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="197"/>
+ <location filename="../../src/courtroom.cpp" line="206"/>
<source>Additive</source>
<translation>Aditivo</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="248"/>
+ <location filename="../../src/courtroom.cpp" line="254"/>
+ <source>% x offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="257"/>
+ <source>% y offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="260"/>
<source>To front</source>
<translation>Al frente</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="249"/>
+ <location filename="../../src/courtroom.cpp" line="261"/>
<source>To behind</source>
<translation>Al fondo</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="579"/>
+ <location filename="../../src/courtroom.cpp" line="604"/>
<source>Select a character you wish to pair with.</source>
<translation>Seleccione un personaje con el que desee emparejarse.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="584"/>
<source>Change the percentage offset of your character&apos;s position from the center of the screen.</source>
- <translation>Cambia el desplazamiento porcentual de la posición de tu personaje desde el centro de la pantalla.</translation>
+ <translation type="vanished">Cambia el desplazamiento porcentual de la posición de tu personaje desde el centro de la pantalla.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="590"/>
+ <location filename="../../src/courtroom.cpp" line="623"/>
<source>Change the order of appearance for your character.</source>
<translation>Cambia el orden de aparición de tu personaje.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="595"/>
+ <location filename="../../src/courtroom.cpp" line="628"/>
<source>Display the list of characters to pair with.</source>
<translation>Muestra la lista de personajes para emparejar.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="654"/>
+ <location filename="../../src/courtroom.cpp" line="697"/>
<source>Oops, you&apos;re muted!</source>
<translation>¡Ups, estas silenciado!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="668"/>
+ <location filename="../../src/courtroom.cpp" line="711"/>
<source>Set your character&apos;s emote to play on your next message.</source>
<translation>Configura el emote de tu personaje para usar en tu próximo mensaje.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="672"/>
+ <location filename="../../src/courtroom.cpp" line="715"/>
<source>Set your character&apos;s supplementary background.</source>
<translation>Establece el fondo suplementario de tu personaje.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="678"/>
<source>Set an &apos;iniswap&apos;, or an alternative character folder to refer to from your current character.
Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/&lt;charname&gt;/iniswaps.ini</source>
- <translation>Establece un &apos;iniswap&apos;, o una carpeta de caracteres alternativa para consultar desde su personaje actual.
+ <translation type="vanished">Establece un &apos;iniswap&apos;, o una carpeta de caracteres alternativa para consultar desde su personaje actual.
Edite escribiendo y presionando Enter, [X] para eliminar. Esto es guardado en base/characters/&lt;charname&gt;/iniswaps.ini</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="687"/>
- <location filename="../../src/courtroom.cpp" line="704"/>
+ <location filename="../../src/courtroom.cpp" line="609"/>
+ <source>Change the horizontal percentage offset of your character&apos;s position from the center of the screen.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="616"/>
+ <source>Change the vertical percentage offset of your character&apos;s position from the center of the screen.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="721"/>
+ <source>Set an &apos;iniswap&apos;, or an alternative character folder to refer to from your current character.
+Edit by typing and pressing Enter, [X] to remove. This saves to your base/iniswaps.ini</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="730"/>
<source>Remove the currently selected iniswap from the list and return to the original character folder.</source>
<translation>Elimina el iniswap seleccionado actualmente de la lista y regresa a la carpeta de caracteres original.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="695"/>
+ <location filename="../../src/courtroom.cpp" line="738"/>
<source>Set a sound effect to play on your next &apos;Preanim&apos;. Leaving it on Default will use the emote-defined sound (if any).
Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/&lt;charname&gt;/soundlist.ini</source>
<translation>Establece un efecto de sonido para jugar en su próximo &apos;Preanim&apos;. Dejarlo en Predeterminado usará el sonido definido por emoticones (si hay).
Edite escribiendo y presionando Enter, [X] para eliminar. Esto es guardado en base/characters/&lt;charname&gt;/iniswaps.ini</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="711"/>
+ <location filename="../../src/courtroom.cpp" line="746"/>
+ <source>Remove the currently selected sound effect.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="754"/>
<source>Choose an effect to play on your next spoken message.
The effects are defined in your theme/effects/effects.ini. Your character can define custom effects by
char.ini [Options] category, effects = &apos;miscname&apos; where it referes to misc/&lt;miscname&gt;/effects.ini to read the effects.</source>
@@ -951,314 +1018,386 @@ Los efectos se definen en theme/effects/effects.ini. Tu personaje puede definir
char.ini [Opciones] categoría, effects = &apos;miscname&apos; donde se refiere a misc/&lt;miscname&gt;/effects.ini para leer los efectos.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="738"/>
+ <location filename="../../src/courtroom.cpp" line="781"/>
<source>Hold It!</source>
<translation>¡Un Momento!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="739"/>
- <location filename="../../src/courtroom.cpp" line="745"/>
- <location filename="../../src/courtroom.cpp" line="751"/>
+ <location filename="../../src/courtroom.cpp" line="782"/>
+ <location filename="../../src/courtroom.cpp" line="788"/>
+ <location filename="../../src/courtroom.cpp" line="794"/>
<source>When this is turned on, your next in-character message will be a shout!</source>
<translatorcomment>Why the exclamation?</translatorcomment>
<translation>Cuando esto es activado, tu próximo mensaje del personaje será un grito.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="744"/>
+ <location filename="../../src/courtroom.cpp" line="787"/>
<source>Objection!</source>
<translation>¡Protesto!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="750"/>
+ <location filename="../../src/courtroom.cpp" line="793"/>
<source>Take That!</source>
<translation>¡Toma Eso!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="758"/>
+ <location filename="../../src/courtroom.cpp" line="801"/>
<source>Toggle between server chat and global AO2 chat.</source>
<translation>Alternar entre el chat del servidor y el chat global.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="762"/>
- <location filename="../../src/courtroom.cpp" line="766"/>
- <location filename="../../src/courtroom.cpp" line="772"/>
- <location filename="../../src/courtroom.cpp" line="776"/>
+ <location filename="../../src/courtroom.cpp" line="805"/>
+ <location filename="../../src/courtroom.cpp" line="809"/>
+ <location filename="../../src/courtroom.cpp" line="815"/>
+ <location filename="../../src/courtroom.cpp" line="819"/>
<source>This will display the animation in the viewport as soon as it is pressed.</source>
<translation>Esto mostrará la animación en el viewport tan pronto como se presione.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="770"/>
+ <location filename="../../src/courtroom.cpp" line="813"/>
<source>Guilty!</source>
<translation>¡Culpable!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="783"/>
+ <location filename="../../src/courtroom.cpp" line="826"/>
<source>Bring up the Character Select Screen and change your character.</source>
<translation>Abre la pantalla de selección de personaje y cambia tu personaje.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="789"/>
+ <location filename="../../src/courtroom.cpp" line="832"/>
<source>Refresh the theme and update all of the ui elements to match.</source>
<translation>Actualiza el tema y todos los elementos de la interfaz de usuario para que coincidan.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="795"/>
+ <location filename="../../src/courtroom.cpp" line="838"/>
<source>Request the attention of the current server&apos;s moderator.</source>
<translation>Solicite la atención del moderador actual del servidor.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="801"/>
+ <location filename="../../src/courtroom.cpp" line="844"/>
<source>Allows you to change various aspects of the client.</source>
<translation>Le permite cambiar varios aspectos del cliente.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="807"/>
+ <location filename="../../src/courtroom.cpp" line="850"/>
<source>An interface to help you announce a case (you have to be a CM first to be able to announce cases)</source>
<translation>Una interfaz para ayudarlo a anunciar un caso (debe ser un CM para poder anunciar casos)</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="813"/>
+ <location filename="../../src/courtroom.cpp" line="856"/>
<source>Switch between Areas and Music lists</source>
<translation>Cambiar entre áreas y listas de música</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="818"/>
+ <location filename="../../src/courtroom.cpp" line="861"/>
<source>Play a single-shot animation as defined by the emote when checked.</source>
<translation>Reproduzca una animación de un solo disparo según lo definido por el emote cuando esté marcado.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="822"/>
+ <location filename="../../src/courtroom.cpp" line="864"/>
<source>If preanim is checked, display the input text immediately as the animation plays concurrently.</source>
<translation>Si se marca preanim, muestre el texto de entrada inmediatamente mientras la animación se reproduce simultáneamente.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="826"/>
+ <location filename="../../src/courtroom.cpp" line="882"/>
<source>Mirror your character&apos;s emotes when checked.</source>
<translation>Refleja los gestos de tu personaje cuando esté marcado.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="830"/>
+ <location filename="../../src/courtroom.cpp" line="886"/>
<source>Add text to your last spoken message when checked.</source>
<translation>Agregar texto a su último mensaje hablado cuando esté marcado.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="834"/>
+ <location filename="../../src/courtroom.cpp" line="890"/>
<source>Do not listen to mod calls when checked, preventing them from playing sounds or focusing attention on the window.</source>
<translation>No escucha llamadas de moderación cuando esté marcado, evitando que reproduzcan sonidos o centrando la atención en la ventana.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="838"/>
+ <location filename="../../src/courtroom.cpp" line="894"/>
<source>Lets you receive case alerts when enabled.
(You can set your preferences in the Settings!)</source>
<translation>Le permite recibir alertas de casos cuando está habilitado.
(¡Puedes configurar tus preferencias en la Configuración!)</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="843"/>
+ <location filename="../../src/courtroom.cpp" line="899"/>
<source>Display customized shownames for all users when checked.</source>
<translation>Mostrar nombres personalizados para todos los usuarios cuando esté marcado.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="846"/>
+ <location filename="../../src/courtroom.cpp" line="902"/>
<source>Custom Shout!</source>
<translation>¡Grito personalizado!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="849"/>
+ <location filename="../../src/courtroom.cpp" line="905"/>
<source>This will display the custom character-defined animation in the viewport as soon as it is pressed.
To make one, your character&apos;s folder must contain custom.[webp/apng/gif/png] and custom.[wav/ogg/opus] sound effect</source>
<translation>Esto mostrará la animación de personaje personalizada definida en el viewport tan pronto como se presione.
Para hacer una, la carpeta de tu personaje debe contener efectos personalizados [webp/apng/gif/png]. Y efectos personalizados de sonido [wav/ogg/opus]</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="857"/>
+ <location filename="../../src/courtroom.cpp" line="913"/>
<source>Play realization sound and animation in the viewport on the next spoken message when checked.</source>
<translation>Reproduzca sonido y animación de realización en la ventana gráfica en el siguiente mensaje hablado cuando esté marcado.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="863"/>
+ <location filename="../../src/courtroom.cpp" line="919"/>
<source>Shake the screen on next spoken message when checked.</source>
<translation>Agite la pantalla en el siguiente mensaje hablado cuando esté marcado.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="869"/>
+ <location filename="../../src/courtroom.cpp" line="925"/>
<source>Display the list of character folders you wish to mute.</source>
<translation>Muestra la lista de carpetas de caracteres que desea silenciar.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="873"/>
- <location filename="../../src/courtroom.cpp" line="881"/>
+ <location filename="../../src/courtroom.cpp" line="929"/>
+ <location filename="../../src/courtroom.cpp" line="937"/>
<source>Increase the health bar.</source>
<translation>Aumenta la barra de salud.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="877"/>
- <location filename="../../src/courtroom.cpp" line="885"/>
+ <location filename="../../src/courtroom.cpp" line="933"/>
+ <location filename="../../src/courtroom.cpp" line="941"/>
<source>Decrease the health bar.</source>
<translation>Disminuye la barra de salud.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="889"/>
+ <location filename="../../src/courtroom.cpp" line="945"/>
<source>Change the text color of the spoken message.
You can also select a part of your currently typed message and use the dropdown to change its color!</source>
<translation>Cambia el color del texto en el chat IC.
¡También puede seleccionar una parte de su mensaje escrito actualmente y usar el menú desplegable para cambiar su color!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="903"/>
+ <location filename="../../src/courtroom.cpp" line="959"/>
<source>Return back to the server list.</source>
<translation>Regresar a la lista de servidores.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="916"/>
+ <location filename="../../src/courtroom.cpp" line="972"/>
<source>Become a spectator. You won&apos;t be able to interact with the in-character screen.</source>
<translation>Conviértete en espectador. No podrás interactuar como personaje.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="1514"/>
- <location filename="../../src/courtroom.cpp" line="3452"/>
+ <location filename="../../src/courtroom.cpp" line="1615"/>
+ <location filename="../../src/courtroom.cpp" line="4001"/>
<source>CLIENT</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="2257"/>
- <location filename="../../src/courtroom.cpp" line="2259"/>
+ <location filename="../../src/courtroom.cpp" line="2034"/>
+ <location filename="../../src/courtroom.cpp" line="2122"/>
+ <location filename="../../src/courtroom.cpp" line="2197"/>
+ <source>HOLD IT!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2039"/>
+ <location filename="../../src/courtroom.cpp" line="2127"/>
+ <location filename="../../src/courtroom.cpp" line="2204"/>
+ <source>OBJECTION!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2044"/>
+ <location filename="../../src/courtroom.cpp" line="2132"/>
+ <location filename="../../src/courtroom.cpp" line="2213"/>
+ <source>TAKE THAT!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2056"/>
+ <location filename="../../src/courtroom.cpp" line="2144"/>
+ <location filename="../../src/courtroom.cpp" line="2233"/>
+ <source>CUSTOM OBJECTION!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2060"/>
+ <location filename="../../src/courtroom.cpp" line="2148"/>
+ <location filename="../../src/courtroom.cpp" line="3028"/>
+ <source>shouts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2071"/>
+ <location filename="../../src/courtroom.cpp" line="2158"/>
<source>has presented evidence</source>
<translation>ha presentado evidencia</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3166"/>
- <location filename="../../src/courtroom.cpp" line="3168"/>
+ <location filename="../../src/courtroom.cpp" line="3024"/>
+ <location filename="../../src/courtroom.cpp" line="3685"/>
+ <location filename="../../src/courtroom.cpp" line="3686"/>
+ <source>has stopped the music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3657"/>
+ <location filename="../../src/courtroom.cpp" line="3699"/>
+ <source>[MISSING] %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3689"/>
+ <location filename="../../src/courtroom.cpp" line="3690"/>
<source>has played a song</source>
<translation>ha reproducido la canción</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3302"/>
+ <location filename="../../src/courtroom.cpp" line="3827"/>
<source>You will now pair up with %1 if they also choose your character in return.</source>
<translation>Ahora se emparejará con %1 si también eligen a su personaje.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3310"/>
+ <location filename="../../src/courtroom.cpp" line="3835"/>
<source>You are no longer paired with anyone.</source>
<translation>Ya no estás emparejado con nadie.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3315"/>
+ <location filename="../../src/courtroom.cpp" line="3840"/>
<source>Are you sure you typed that well? The char ID could not be recognised.</source>
<translation>¿Estás seguro de que lo escribiste bien? El ID de personaje no pudo ser reconocido.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3330"/>
+ <location filename="../../src/courtroom.cpp" line="3856"/>
+ <source>You have set your offset to %1%%.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>You have set your offset to </source>
- <translation>Ha configurado su desplazamiento en </translation>
+ <translation type="vanished">Ha configurado su desplazamiento en </translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3337"/>
+ <location filename="../../src/courtroom.cpp" line="3861"/>
<source>Your offset must be between -100% and 100%!</source>
<translation>¡Su desplazamiento debe estar entre -100% y 100%!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3342"/>
+ <location filename="../../src/courtroom.cpp" line="3866"/>
<source>That offset does not look like one.</source>
<translation>Ese desplazamiento no se parece a uno.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3348"/>
+ <location filename="../../src/courtroom.cpp" line="3879"/>
+ <source>You have set your vertical offset to %1%%.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3886"/>
+ <source>Your vertical offset must be between -100% and 100%!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3891"/>
+ <source>That vertical offset does not look like one.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3897"/>
<source>You switched your music and area list.</source>
<translation>Cambiaste tu lista de música y área.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3355"/>
+ <location filename="../../src/courtroom.cpp" line="3904"/>
<source>You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this.</source>
<translation>Ha habilitado forzosamente funciones que el servidor puede no admitir. Es posible que no pueda hablar IC, o peor, debido a esto.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3369"/>
+ <location filename="../../src/courtroom.cpp" line="3918"/>
<source>Your pre-animations interrupt again.</source>
<translation>Sus pre-animaciones interrumpen de nuevo.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3372"/>
+ <location filename="../../src/courtroom.cpp" line="3921"/>
<source>Your pre-animations will not interrupt text.</source>
<translation>Sus pre-animaciones no interrumpirán el texto.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3383"/>
+ <location filename="../../src/courtroom.cpp" line="3932"/>
<source>Couldn&apos;t open chatlog.txt to write into.</source>
<translation>No se pudo abrir chatlog.txt para escribir.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3396"/>
+ <location filename="../../src/courtroom.cpp" line="3945"/>
<source>The IC chatlog has been saved.</source>
<translation>El chat IC se ha guardado.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3409"/>
+ <location filename="../../src/courtroom.cpp" line="3958"/>
<source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely the case file you&apos;re looking for can&apos;t be found in there.</source>
<translation>¡No tienes una carpeta `base/cases /`! Ha sido creada para ti. Pero debido a que no existia la carpeta, tampoco habían casos guardados ahí.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3424"/>
+ <location filename="../../src/courtroom.cpp" line="3973"/>
<source>You need to give a filename to load (extension not needed)! Make sure that it is in the `base/cases/` folder, and that it is a correctly formatted ini.
Cases you can load: %1</source>
<translation>¡Debe dar un nombre de archivo para cargar (no se necesita extensión)! Asegúrese de que esté en la carpeta `base/cases/` y de que tenga el formato correcto.
Casos que puede cargar: %1</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3453"/>
+ <location filename="../../src/courtroom.cpp" line="4002"/>
<source>Case made by %1.</source>
<translation>Caso hecho por %1.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3462"/>
+ <location filename="../../src/courtroom.cpp" line="4012"/>
<source>Navigate to %1 for the CM doc.</source>
<translation>Navegue a %1 para el documento del CM.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3476"/>
- <location filename="../../src/courtroom.cpp" line="3478"/>
- <location filename="../../src/evidence.cpp" line="762"/>
- <location filename="../../src/evidence.cpp" line="764"/>
+ <location filename="../../src/courtroom.cpp" line="4034"/>
+ <location filename="../../src/courtroom.cpp" line="4036"/>
+ <location filename="../../src/evidence.cpp" line="765"/>
+ <location filename="../../src/evidence.cpp" line="767"/>
<source>UNKNOWN</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3486"/>
+ <location filename="../../src/courtroom.cpp" line="4044"/>
<source>Your case &quot;%1&quot; was loaded!</source>
<translation>Su caso &quot;%1&quot; fue cargado!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4084"/>
+ <location filename="../../src/courtroom.cpp" line="4617"/>
+ <source>Stop Current Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="4618"/>
<source>Play Random Song</source>
<translation>Reproducir canción aleatoria</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4086"/>
+ <location filename="../../src/courtroom.cpp" line="4620"/>
<source>Expand All Categories</source>
<translation>Expandir todas las categorías</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4088"/>
+ <location filename="../../src/courtroom.cpp" line="4622"/>
<source>Collapse All Categories</source>
<translation>Contraer todas las categorías</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4092"/>
+ <location filename="../../src/courtroom.cpp" line="4626"/>
<source>Fade Out Previous</source>
<translation>Desvanecer Anterior</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4098"/>
+ <location filename="../../src/courtroom.cpp" line="4632"/>
<source>Fade In</source>
<translation>Fundirse</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4104"/>
+ <location filename="../../src/courtroom.cpp" line="4638"/>
<source>Synchronize</source>
<translation>Sincronizar</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4407"/>
+ <location filename="../../src/courtroom.cpp" line="4970"/>
<source>Default</source>
<translation>Predeterminado</translation>
</message>
@@ -1269,7 +1408,7 @@ Cases you can load: </source>
Casos que puede cargar: </translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3436"/>
+ <location filename="../../src/courtroom.cpp" line="3985"/>
<source>Too many arguments to load a case! You only need one filename, without extension.</source>
<translation>¡Demasiados argumentos para cargar un caso! Solo necesita un nombre de archivo, sin extensión.</translation>
</message>
@@ -1294,34 +1433,34 @@ Casos que puede cargar: </translation>
<translation type="obsolete">&quot; fue cargado!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3498"/>
+ <location filename="../../src/courtroom.cpp" line="4056"/>
<source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely that you somehow deleted it.</source>
<translation>¡No tienes una carpeta `base/cases /`! Fue creada para ti.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3513"/>
+ <location filename="../../src/courtroom.cpp" line="4071"/>
<source>You need to give a filename to save (extension not needed) and the courtroom status!</source>
<translation>¡Debe dar un nombre de archivo para guardar (no se necesita la extensión) y el estado de la sala del tribunal!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3523"/>
+ <location filename="../../src/courtroom.cpp" line="4081"/>
<source>Too many arguments to save a case! You only need a filename without extension and the courtroom status!</source>
<translatorcomment>why two exclamations, seems excesive.</translatorcomment>
<translation>¡Demasiados argumentos para salvar un caso! Solo necesita un nombre de archivo sin extensión y el estado de la sala del tribunal.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3550"/>
+ <location filename="../../src/courtroom.cpp" line="4108"/>
<source>Succesfully saved, edit doc and cmdoc link on the ini!</source>
<translation>¡Guardado con éxito, puede editar el doc y doc link en el archivo ini!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3577"/>
+ <location filename="../../src/courtroom.cpp" line="4135"/>
<source>Master</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="756"/>
- <location filename="../../src/courtroom.cpp" line="3584"/>
+ <location filename="../../src/courtroom.cpp" line="799"/>
+ <location filename="../../src/courtroom.cpp" line="4142"/>
<source>Server</source>
<translation></translation>
</message>
@@ -1334,28 +1473,28 @@ Casos que puede cargar: </translation>
<translation type="obsolete">¡Demasiados argumentos para salvar un caso! Solo necesita un nombre de archivo sin extensión y el estado de la sala del tribunal.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4573"/>
+ <location filename="../../src/courtroom.cpp" line="5153"/>
<source>Reason:</source>
<translation>Razón:</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4574"/>
+ <location filename="../../src/courtroom.cpp" line="5154"/>
<source>Call Moderator</source>
<translation>Llamar Moderador</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4582"/>
- <location filename="../../src/courtroom.cpp" line="4586"/>
+ <location filename="../../src/courtroom.cpp" line="5162"/>
+ <location filename="../../src/courtroom.cpp" line="5166"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4582"/>
+ <location filename="../../src/courtroom.cpp" line="5162"/>
<source>You must provide a reason.</source>
<translation>Debes proporcionar una razón.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4586"/>
+ <location filename="../../src/courtroom.cpp" line="5166"/>
<source>The message is too long.</source>
<translation>El mensaje es muy largo.</translation>
</message>
@@ -1422,28 +1561,28 @@ Se le preguntará si hay cambios no guardados.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="158"/>
- <location filename="../../src/evidence.cpp" line="617"/>
+ <location filename="../../src/evidence.cpp" line="619"/>
<source>Transfer evidence to private inventory.</source>
<translation>Transferir evidencia al inventario privado.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="163"/>
- <location filename="../../src/evidence.cpp" line="627"/>
+ <location filename="../../src/evidence.cpp" line="629"/>
<source>Transfer evidence to global inventory.</source>
<translation>Transferir evidencia al inventario global.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="263"/>
+ <location filename="../../src/evidence.cpp" line="264"/>
<source>The piece of evidence you&apos;ve been editing has changed.</source>
<translation>La evidencia que has estado editando ha cambiado.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="264"/>
+ <location filename="../../src/evidence.cpp" line="265"/>
<source>Do you wish to keep your changes?</source>
<translation>¿Desea conservar sus cambios?</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="265"/>
+ <location filename="../../src/evidence.cpp" line="266"/>
<source>Name: %1
Image: %2
Description:
@@ -1454,125 +1593,140 @@ Descripción:
%3</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="387"/>
+ <location filename="../../src/evidence.cpp" line="388"/>
<source>Images (*.png)</source>
<translation>Imágenes (* .png)</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="456"/>
- <location filename="../../src/evidence.cpp" line="460"/>
- <location filename="../../src/evidence.cpp" line="463"/>
+ <location filename="../../src/evidence.cpp" line="457"/>
+ <location filename="../../src/evidence.cpp" line="461"/>
+ <location filename="../../src/evidence.cpp" line="464"/>
<source>Double-click to edit...</source>
<translation>Doble click para editar...</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="478"/>
+ <location filename="../../src/evidence.cpp" line="479"/>
<source>Add new evidence...</source>
<translation>Añadir nueva evidencia...</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="556"/>
+ <location filename="../../src/evidence.cpp" line="558"/>
<source>Evidence has been modified.</source>
<translation>La evidencia ha sido modificada.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="557"/>
+ <location filename="../../src/evidence.cpp" line="559"/>
<source>Do you want to save your changes?</source>
<translation>¿Quieres guardar tus cambios?</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="619"/>
+ <location filename="../../src/evidence.cpp" line="621"/>
<source>Current evidence is global. Click to switch to private.</source>
<translation>La evidencia actual es global. Haga clic para cambiar a privado.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="629"/>
+ <location filename="../../src/evidence.cpp" line="631"/>
<source>Current evidence is private. Click to switch to global.</source>
<translation>La evidencia actual es privada. Haga clic para cambiar a global.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="659"/>
+ <location filename="../../src/evidence.cpp" line="662"/>
<source>&quot;%1&quot; has been transferred.</source>
<translation>&quot;%1&quot; ha sido transferido.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="722"/>
+ <location filename="../../src/evidence.cpp" line="725"/>
<source>Save Inventory</source>
<translation>Guardar inventario</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="722"/>
- <location filename="../../src/evidence.cpp" line="748"/>
+ <location filename="../../src/evidence.cpp" line="725"/>
+ <location filename="../../src/evidence.cpp" line="751"/>
<source>Ini Files (*.ini)</source>
<translation>Archivos Ini (*.ini)</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="748"/>
+ <location filename="../../src/evidence.cpp" line="751"/>
<source>Open Inventory</source>
<translation>Abrir el inventario</translation>
</message>
</context>
<context>
+ <name>DemoServer</name>
+ <message>
+ <location filename="../../src/demoserver.cpp" line="38"/>
+ <location filename="../../src/demoserver.cpp" line="152"/>
+ <source>Load Demo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/demoserver.cpp" line="38"/>
+ <location filename="../../src/demoserver.cpp" line="152"/>
+ <source>Demo Files (*.demo)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Lobby</name>
<message>
- <location filename="../../src/lobby.cpp" line="14"/>
+ <location filename="../../src/lobby.cpp" line="15"/>
<source>Attorney Online 2</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="33"/>
+ <location filename="../../src/lobby.cpp" line="35"/>
<source>Search</source>
<translation>Buscar</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="41"/>
+ <location filename="../../src/lobby.cpp" line="43"/>
<source>Name</source>
<translation>Nombre</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="96"/>
+ <location filename="../../src/lobby.cpp" line="98"/>
<source>It doesn&apos;t look like your client is set up correctly.
Did you download all resources correctly from tiny.cc/getao, including the large &apos;base&apos; folder?</source>
<translation>No parece que su cliente esté configurado correctamente.
¿Descargó todos los recursos correctamente desde tiny.cc/getao, incluida la gran carpeta &apos;base&apos;?</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="125"/>
+ <location filename="../../src/lobby.cpp" line="127"/>
<source>Version: %1</source>
<translation>Versión: %1</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="131"/>
+ <location filename="../../src/lobby.cpp" line="133"/>
<source>Settings</source>
<translation>Ajustes</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="134"/>
+ <location filename="../../src/lobby.cpp" line="136"/>
<source>Allows you to change various aspects of the client.</source>
<translation>Le permite cambiar varios aspectos del cliente.</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="178"/>
+ <location filename="../../src/lobby.cpp" line="180"/>
<source>Loading</source>
<translation>Cargando</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="182"/>
+ <location filename="../../src/lobby.cpp" line="184"/>
<source>Cancel</source>
<translation>Cancelar</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="361"/>
+ <location filename="../../src/lobby.cpp" line="366"/>
<source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Client development:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;QA testing:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!&lt;p&gt;The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.&lt;p&gt;Running on Qt version %2 with the BASS audio engine.&lt;br&gt;APNG plugin loaded: %3&lt;p&gt;Built on %4</source>
<translation>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;El simulador de drama legal&lt;p&gt;&lt;b&gt;Código fuente:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Desarrollo mayor:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Desarrollo del cliente:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;Prueba de control de calidad:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Agradecimiento especial:&lt;/b&gt;&lt;br&gt;CrazyJC y MaximumVolty (versión 2.8); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, y FanatSors (AO1); server hosts, game masters, case makers, creadores de contenido y toda la comunidad AO2.&lt;p&gt;El proyecto Attorney Online novela visual en red tiene copyright (c) 2016-2020 Attorney Online developers. Se aplican licencias de código abierto. Todos los demás activos son propiedad de sus respectivos dueños.&lt;p&gt;Usando Qt versión %2 con el motor de audio BASS.&lt;br&gt;Plugin APNG cargado: %3&lt;p&gt;Compilado el %4</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="393"/>
+ <location filename="../../src/lobby.cpp" line="398"/>
<source>Yes</source>
<translation>Sí</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="393"/>
+ <location filename="../../src/lobby.cpp" line="398"/>
<source>No</source>
<translation></translation>
</message>
@@ -1585,7 +1739,7 @@ Did you download all resources correctly from tiny.cc/getao, including the large
<translation type="obsolete">&lt;h2&gt;Attorney Online %1&lt;/h2&gt;El simulador de drama legal&lt;p&gt;&lt;b&gt;Código fuente:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Desarrollo mayor:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Desarrollo del cliente:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;Prueba de control de calidad:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Agradecimiento especial:&lt;/b&gt;&lt;br&gt;CrazyJC y MaximumVolty (versión 2.8); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, y FanatSors (AO1); server hosts, game masters, case makers, creadores de contenido y toda la comunidad AO2.&lt;p&gt;El proyecto Attorney Online novela visual en red tiene copyright (c) 2016-2020 Attorney Online developers. Se aplican licencias de código abierto. Todos los demás activos son propiedad de sus respectivos dueños.&lt;p&gt;Usando Qt versión %2 con el motor de audio %3.&lt;p&gt;Compilado el %4</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="395"/>
+ <location filename="../../src/lobby.cpp" line="400"/>
<source>About</source>
<translation>Acerca de</translation>
</message>
@@ -1598,13 +1752,13 @@ Did you download all resources correctly from tiny.cc/getao, including the large
<translation type="obsolete">&lt;h2&gt;Attorney Online %1&lt;/h2&gt;El simulador de drama legal&lt;p&gt;&lt;b&gt;Código fuente:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https: //github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Desarrollo mayor:&lt;/b&gt; &lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;Agradecimiento especial:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (diseño de interfaz de usuario), Draxirch (diseño de interfaz de usuario), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="537"/>
+ <location filename="../../src/lobby.cpp" line="551"/>
<source>Online: %1/%2</source>
<translation>En línea: %1/%2</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="144"/>
- <location filename="../../src/lobby.cpp" line="433"/>
+ <location filename="../../src/lobby.cpp" line="146"/>
+ <location filename="../../src/lobby.cpp" line="438"/>
<source>Offline</source>
<translation>Fuera de línea</translation>
</message>
@@ -1626,17 +1780,17 @@ Did you download all resources correctly from tiny.cc/getao, including the large
<context>
<name>debug_functions</name>
<message>
- <location filename="../../src/debug_functions.cpp" line="10"/>
+ <location filename="../../src/debug_functions.cpp" line="13"/>
<source>Error: %1</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/debug_functions.cpp" line="13"/>
+ <location filename="../../src/debug_functions.cpp" line="16"/>
<source>Error</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/debug_functions.cpp" line="25"/>
+ <location filename="../../src/debug_functions.cpp" line="29"/>
<source>Notice</source>
<translatorcomment>In spanish it would be &quot;Aviso&quot;, but I believe it&apos;s going to be more useful for bug reports to not translate any debug strings.</translatorcomment>
<translation></translation>
diff --git a/resource/translations/ao_jp.qm b/resource/translations/ao_jp.qm
index e4fb562a..5989c9bc 100644
--- a/resource/translations/ao_jp.qm
+++ b/resource/translations/ao_jp.qm
Binary files differ
diff --git a/resource/translations/ao_jp.ts b/resource/translations/ao_jp.ts
index c2fea9a8..2298bcf8 100644
--- a/resource/translations/ao_jp.ts
+++ b/resource/translations/ao_jp.ts
@@ -4,72 +4,69 @@
<context>
<name>AOApplication</name>
<message>
- <location filename="../../src/aoapplication.cpp" line="129"/>
+ <location filename="../../src/aoapplication.cpp" line="133"/>
<source>Disconnected from server.</source>
- <translation type="unfinished"></translation>
+ <translation>サーãƒãƒ¼ãŒã¤ãªãŒã‚‰ãªããªã‚Šã¾ã—ãŸ</translation>
</message>
<message>
- <location filename="../../src/aoapplication.cpp" line="152"/>
+ <location filename="../../src/aoapplication.cpp" line="156"/>
<source>Error connecting to master server. Will try again in %1 seconds.</source>
- <translation type="unfinished"></translation>
+ <translation>マスターサーãƒãƒ¼ã«ã¤ãªãŒã‚Šã¾ã›ã‚“。%1ç§’ã®å¾Œã§ã‚‚ã†ä¸€å›ž</translation>
</message>
<message>
- <location filename="../../src/aoapplication.cpp" line="157"/>
+ <location filename="../../src/aoapplication.cpp" line="161"/>
<source>There was an error connecting to the master server.
We deploy multiple master servers to mitigate any possible downtime, but the client appears to have exhausted all possible methods of finding and connecting to one.
Please check your Internet connection and firewall, and please try again.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="94"/>
+ <location filename="../../src/packet_distribution.cpp" line="93"/>
<source>Outdated version! Your version: %1
Please go to aceattorneyonline.com to update.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="235"/>
+ <location filename="../../src/packet_distribution.cpp" line="263"/>
<source>Attorney Online 2</source>
- <translation type="unfinished"></translation>
+ <translation>逆転è£åˆ¤ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ï¼’</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="263"/>
+ <location filename="../../src/packet_distribution.cpp" line="289"/>
<source>Loading</source>
<translation>ロード中</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="363"/>
<source>Loading evidence:
%1/%2</source>
- <translation>証拠ãŒãƒ­ãƒ¼ãƒ‰ä¸­: %1/%2</translation>
+ <translation type="vanished">証拠ãŒãƒ­ãƒ¼ãƒ‰ä¸­: %1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="398"/>
- <location filename="../../src/packet_distribution.cpp" line="492"/>
+ <location filename="../../src/packet_distribution.cpp" line="374"/>
<source>Loading music:
%1/%2</source>
<translation>音楽ãŒãƒ­ãƒ¼ãƒ‰ä¸­: %1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="316"/>
- <location filename="../../src/packet_distribution.cpp" line="465"/>
+ <location filename="../../src/packet_distribution.cpp" line="346"/>
<source>Loading chars:
%1/%2</source>
<translation>キャラãŒãƒ­ãƒ¼ãƒ‰ä¸­: %1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="674"/>
+ <location filename="../../src/packet_distribution.cpp" line="578"/>
<source>You have been kicked from the server.
Reason: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="682"/>
+ <location filename="../../src/packet_distribution.cpp" line="586"/>
<source>You have been banned from the server.
Reason: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="690"/>
+ <location filename="../../src/packet_distribution.cpp" line="594"/>
<source>You are banned on this server.
Reason: %1</source>
<translation type="unfinished"></translation>
@@ -118,7 +115,7 @@ Reason: %1</source>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="12"/>
<source>Settings</source>
- <translation type="unfinished"></translation>
+ <translation>設定</translation>
</message>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="46"/>
@@ -156,413 +153,503 @@ Reason: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="133"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="231"/>
<source>Default username:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="135"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="233"/>
<source>Your OOC name will be automatically set to this value when you join a server.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="148"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="246"/>
<source>Custom shownames:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="150"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="248"/>
<source>Gives the default value for the in-game &apos;Custom shownames&apos; tickbox, which in turn determines whether the client should display custom in-character names.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="170"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="268"/>
<source>Backup MS:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="172"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="270"/>
<source>If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="185"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="283"/>
<source>Discord:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="187"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="285"/>
<source>Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="200"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="298"/>
<source>Language:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="202"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="300"/>
<source>Sets the language if you don&apos;t want to use your system language.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="324"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="438"/>
<source>Callwords</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="351"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="465"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!&lt;br&gt;Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="361"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="475"/>
<source>Audio</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="375"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="489"/>
<source>Audio device:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="376"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="490"/>
<source>Sets the audio device for all sounds.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="419"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="523"/>
<source>Music:</source>
<translation>音楽:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="434"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="538"/>
<source>SFX:</source>
<translation>効果音:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="450"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="554"/>
<source>Blips:</source>
<translation>ブリップ:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="452"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="556"/>
<source>Sets the volume of the blips, the talking sound effects.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="474"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="578"/>
<source>Blip rate:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="476"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="580"/>
<source>Sets the delay between playing the blip sounds.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="491"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="595"/>
<source>Blank blips:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="493"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="597"/>
<source>If true, the game will play a blip sound even when a space is &apos;being said&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="505"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="609"/>
<source>Enable Looping SFX:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="506"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="610"/>
<source>If true, the game will allow looping sound effects to play on preanimations.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="518"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="622"/>
<source>Kill Music On Objection:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="208"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="306"/>
<source> - Keep current setting</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="220"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="125"/>
+ <source>Log newline:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="127"/>
+ <source>If ticked, new messages will appear separated, with the message coming on the next line after the name. When unticked, it displays it as &apos;name: message&apos;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="140"/>
+ <source>Log margin:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="141"/>
+ <source>The distance in pixels between each entry in the IC log. Default: 0.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="155"/>
+ <source>Log timestamp:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="157"/>
+ <source>If ticked, log will contain a timestamp in UTC before the name.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="168"/>
+ <source>Log IC actions:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="170"/>
+ <source>If ticked, log will show IC actions such as shouting and presenting evidence.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="182"/>
+ <source>Text Stay Time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="183"/>
+ <source>Minimum amount of time (in miliseconds) an IC message must stay on screen before the next IC message is shown, acting as a &apos;queue&apos;. Set to 0 to disable this behavior.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="197"/>
+ <source>Desynchronize IC Logs:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="199"/>
+ <source>If ticked, log will show messages as-received, while viewport will parse according to the queue (Text Stay Time).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="210"/>
+ <source>Instant Objection:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="212"/>
+ <source>If Text Stay Time is more than 0, instant objection will skip queued messages instead of waiting to catch up.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="320"/>
<source>Allow Screenshake:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="222"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="322"/>
<source>Allows screenshaking. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="234"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="334"/>
<source>Allow Effects:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="236"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="336"/>
<source>Allows screen effects. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="248"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="348"/>
<source>Network Frame Effects:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="249"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="349"/>
<source>Send screen-shaking, flashes and sounds as defined in the char.ini over the network. Only works for servers that support this functionality.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="262"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="362"/>
<source>Colors in IC Log:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="264"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="364"/>
<source>Use the markup colors in the server IC chatlog.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="275"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="375"/>
<source>Sticky Sounds:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="277"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="377"/>
<source>Turn this on to prevent the sound dropdown from clearing the sound after playing it.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="289"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="389"/>
<source>Sticky Effects:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="291"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="391"/>
<source>Turn this on to prevent the effects dropdown from clearing the effect after playing it.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="304"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="404"/>
<source>Sticky Preanims:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="306"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="406"/>
<source>Turn this on to prevent preanimation checkbox from clearing after playing the emote.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../src/aooptionsdialog.cpp" line="418"/>
+ <source>Custom Chatboxes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../../src/aooptionsdialog.cpp" line="420"/>
+ <source>Turn this on to allow characters to define their own custom chat box designs.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="524"/>
<source>Sets the music&apos;s default volume.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="436"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="540"/>
<source>Sets the SFX&apos;s default volume. Interjections and actual sound effects count as &apos;SFX&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="484"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="588"/>
<source>Play a blip sound &quot;once per every X symbols&quot;, where X is the blip rate.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="520"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="624"/>
<source>If true, AO2 will stop the music for you when you or someone else does &apos;Objection!&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="532"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="636"/>
<source>Casing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="549"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="653"/>
<source>This server supports case alerts.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="552"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="656"/>
<source>This server does not support case alerts.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="553"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="657"/>
<source>Pretty self-explanatory.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="562"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="666"/>
<source>Casing:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="564"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="668"/>
<source>If checked, you will get alerts about case announcements.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="580"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="684"/>
<source>Defense:</source>
- <translation type="unfinished"></translation>
+ <translation>å¼è­·å£«</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="581"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="685"/>
<source>If checked, you will get alerts about case announcements if a defense spot is open.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="595"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="699"/>
<source>Prosecution:</source>
- <translation type="unfinished"></translation>
+ <translation>検事</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="597"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="701"/>
<source>If checked, you will get alerts about case announcements if a prosecutor spot is open.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="611"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="715"/>
<source>Judge:</source>
- <translation type="unfinished"></translation>
+ <translation>è£åˆ¤å®˜</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="612"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="716"/>
<source>If checked, you will get alerts about case announcements if the judge spot is open.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="626"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="730"/>
<source>Juror:</source>
- <translation type="unfinished"></translation>
+ <translation>陪審員</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="627"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="731"/>
<source>If checked, you will get alerts about case announcements if a juror spot is open.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="641"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="745"/>
<source>Stenographer:</source>
- <translation type="unfinished"></translation>
+ <translation>記録官</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="643"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="747"/>
<source>If checked, you will get alerts about case announcements if a stenographer spot is open.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="657"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="761"/>
<source>CM:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="659"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="763"/>
<source>If checked, you will appear amongst the potential CMs on the server.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="673"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="777"/>
<source>Hosting cases:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="675"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="779"/>
<source>If you&apos;re a CM, enter what cases you are willing to host.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="793"/>
+ <source>Automatic Logging:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="795"/>
+ <source>If checked, all logs will be automatically written in the /logs folder.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>Courtroom</name>
<message>
- <location filename="../../src/charselect.cpp" line="21"/>
+ <location filename="../../src/charselect.cpp" line="23"/>
<source>Password</source>
- <translation type="unfinished"></translation>
+ <translation>パースワード</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="27"/>
+ <location filename="../../src/charselect.cpp" line="29"/>
<source>Spectator</source>
<translation>観客</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="30"/>
- <location filename="../../src/courtroom.cpp" line="175"/>
+ <location filename="../../src/charselect.cpp" line="32"/>
+ <location filename="../../src/courtroom.cpp" line="153"/>
<source>Search</source>
- <translation type="unfinished"></translation>
+ <translation>検索</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="35"/>
+ <location filename="../../src/charselect.cpp" line="37"/>
<source>Passworded</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="39"/>
+ <location filename="../../src/charselect.cpp" line="41"/>
<source>Taken</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="231"/>
+ <location filename="../../src/charselect.cpp" line="239"/>
<source>Generating chars:
%1/%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="148"/>
+ <location filename="../../src/courtroom.cpp" line="126"/>
<source>Showname</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="152"/>
+ <location filename="../../src/courtroom.cpp" line="130"/>
<source>Message</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="167"/>
+ <location filename="../../src/courtroom.cpp" line="145"/>
<source>Name</source>
<translation>åå‰</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="217"/>
+ <location filename="../../src/courtroom.cpp" line="195"/>
<source>Pre</source>
<translation>å‰</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="220"/>
+ <location filename="../../src/courtroom.cpp" line="198"/>
<source>Flip</source>
<translation>フリップ</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="224"/>
+ <location filename="../../src/courtroom.cpp" line="202"/>
<source>Guard</source>
<translation>ガード</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="228"/>
+ <location filename="../../src/courtroom.cpp" line="206"/>
<source>Additive</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="233"/>
- <location filename="../../src/courtroom.cpp" line="815"/>
+ <location filename="../../src/courtroom.cpp" line="211"/>
+ <location filename="../../src/courtroom.cpp" line="847"/>
<source>Casing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="238"/>
+ <location filename="../../src/courtroom.cpp" line="216"/>
<source>Shownames</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="241"/>
+ <location filename="../../src/courtroom.cpp" line="219"/>
<source>Immediate</source>
<translation type="unfinished"></translation>
</message>
@@ -591,205 +678,297 @@ Reason: %1</source>
<translation type="vanished">黄色</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3315"/>
+ <location filename="../../src/courtroom.cpp" line="3973"/>
<source>You need to give a filename to load (extension not needed)! Make sure that it is in the `base/cases/` folder, and that it is a correctly formatted ini.
Cases you can load: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3343"/>
+ <location filename="../../src/courtroom.cpp" line="4002"/>
<source>Case made by %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3353"/>
+ <location filename="../../src/courtroom.cpp" line="4012"/>
<source>Navigate to %1 for the CM doc.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3377"/>
+ <location filename="../../src/courtroom.cpp" line="4044"/>
<source>Your case &quot;%1&quot; was loaded!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="767"/>
- <location filename="../../src/courtroom.cpp" line="3475"/>
+ <location filename="../../src/courtroom.cpp" line="799"/>
+ <location filename="../../src/courtroom.cpp" line="4142"/>
<source>Server</source>
- <translation type="unfinished"></translation>
+ <translation>サーãƒãƒ¼</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="143"/>
+ <location filename="../../src/courtroom.cpp" line="121"/>
+ <location filename="../../src/courtroom.cpp" line="3652"/>
+ <location filename="../../src/courtroom.cpp" line="3694"/>
+ <location filename="../../src/courtroom.cpp" line="4415"/>
<source>None</source>
+ <translation>ç„¡</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="254"/>
+ <source>% x offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="749"/>
- <source>Hold It!</source>
+ <location filename="../../src/courtroom.cpp" line="257"/>
+ <source>% y offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="609"/>
+ <source>Change the horizontal percentage offset of your character&apos;s position from the center of the screen.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="616"/>
+ <source>Change the vertical percentage offset of your character&apos;s position from the center of the screen.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="721"/>
+ <source>Set an &apos;iniswap&apos;, or an alternative character folder to refer to from your current character.
+Edit by typing and pressing Enter, [X] to remove. This saves to your base/iniswaps.ini</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="750"/>
- <location filename="../../src/courtroom.cpp" line="756"/>
- <location filename="../../src/courtroom.cpp" line="762"/>
+ <location filename="../../src/courtroom.cpp" line="746"/>
+ <source>Remove the currently selected sound effect.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="781"/>
+ <source>Hold It!</source>
+ <translation>å¾…ã£ãŸï¼</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="782"/>
+ <location filename="../../src/courtroom.cpp" line="788"/>
+ <location filename="../../src/courtroom.cpp" line="794"/>
<source>When this is turned on, your next in-character message will be a shout!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="755"/>
+ <location filename="../../src/courtroom.cpp" line="787"/>
<source>Objection!</source>
- <translation type="unfinished">æ„義ã‚り!</translation>
+ <translation>æ„義ã‚り!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="761"/>
+ <location filename="../../src/courtroom.cpp" line="793"/>
<source>Take That!</source>
- <translation type="unfinished"></translation>
+ <translation>ãらãˆï¼</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="769"/>
+ <location filename="../../src/courtroom.cpp" line="801"/>
<source>Toggle between server chat and global AO2 chat.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="773"/>
- <location filename="../../src/courtroom.cpp" line="777"/>
- <location filename="../../src/courtroom.cpp" line="783"/>
- <location filename="../../src/courtroom.cpp" line="787"/>
+ <location filename="../../src/courtroom.cpp" line="805"/>
+ <location filename="../../src/courtroom.cpp" line="809"/>
+ <location filename="../../src/courtroom.cpp" line="815"/>
+ <location filename="../../src/courtroom.cpp" line="819"/>
<source>This will display the animation in the viewport as soon as it is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="781"/>
+ <location filename="../../src/courtroom.cpp" line="813"/>
<source>Guilty!</source>
- <translation type="unfinished"></translation>
+ <translation>有罪ï¼</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="794"/>
+ <location filename="../../src/courtroom.cpp" line="826"/>
<source>Bring up the Character Select Screen and change your character.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="800"/>
+ <location filename="../../src/courtroom.cpp" line="832"/>
<source>Refresh the theme and update all of the ui elements to match.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="806"/>
+ <location filename="../../src/courtroom.cpp" line="838"/>
<source>Request the attention of the current server&apos;s moderator.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="812"/>
+ <location filename="../../src/courtroom.cpp" line="844"/>
<source>Allows you to change various aspects of the client.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">クライアントã§å¤‰æ›´ã§ãã¾ã™</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="818"/>
+ <location filename="../../src/courtroom.cpp" line="850"/>
<source>An interface to help you announce a case (you have to be a CM first to be able to announce cases)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="824"/>
+ <location filename="../../src/courtroom.cpp" line="856"/>
<source>Switch between Areas and Music lists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="829"/>
+ <location filename="../../src/courtroom.cpp" line="861"/>
<source>Play a single-shot animation as defined by the emote when checked.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="833"/>
+ <location filename="../../src/courtroom.cpp" line="864"/>
<source>If preanim is checked, display the input text immediately as the animation plays concurrently.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="837"/>
+ <location filename="../../src/courtroom.cpp" line="882"/>
<source>Mirror your character&apos;s emotes when checked.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="841"/>
+ <location filename="../../src/courtroom.cpp" line="886"/>
<source>Add text to your last spoken message when checked.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="845"/>
+ <location filename="../../src/courtroom.cpp" line="890"/>
<source>Do not listen to mod calls when checked, preventing them from playing sounds or focusing attention on the window.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="849"/>
+ <location filename="../../src/courtroom.cpp" line="894"/>
<source>Lets you receive case alerts when enabled.
(You can set your preferences in the Settings!)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="854"/>
+ <location filename="../../src/courtroom.cpp" line="899"/>
<source>Display customized shownames for all users when checked.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="857"/>
+ <location filename="../../src/courtroom.cpp" line="902"/>
<source>Custom Shout!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="860"/>
+ <location filename="../../src/courtroom.cpp" line="905"/>
<source>This will display the custom character-defined animation in the viewport as soon as it is pressed.
To make one, your character&apos;s folder must contain custom.[webp/apng/gif/png] and custom.[wav/ogg/opus] sound effect</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="868"/>
+ <location filename="../../src/courtroom.cpp" line="913"/>
<source>Play realization sound and animation in the viewport on the next spoken message when checked.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="874"/>
+ <location filename="../../src/courtroom.cpp" line="919"/>
<source>Shake the screen on next spoken message when checked.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="880"/>
+ <location filename="../../src/courtroom.cpp" line="925"/>
<source>Display the list of character folders you wish to mute.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="884"/>
- <location filename="../../src/courtroom.cpp" line="892"/>
+ <location filename="../../src/courtroom.cpp" line="929"/>
+ <location filename="../../src/courtroom.cpp" line="937"/>
<source>Increase the health bar.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="888"/>
- <location filename="../../src/courtroom.cpp" line="896"/>
+ <location filename="../../src/courtroom.cpp" line="933"/>
+ <location filename="../../src/courtroom.cpp" line="941"/>
<source>Decrease the health bar.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="900"/>
+ <location filename="../../src/courtroom.cpp" line="945"/>
<source>Change the text color of the spoken message.
You can also select a part of your currently typed message and use the dropdown to change its color!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="913"/>
+ <location filename="../../src/courtroom.cpp" line="958"/>
<source>Back to Lobby</source>
<translation>ãƒ­ãƒ“ãƒ¼ã«æˆ»ã‚‹</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3061"/>
- <location filename="../../src/courtroom.cpp" line="4479"/>
- <location filename="../../src/courtroom.cpp" line="4486"/>
+ <location filename="../../src/courtroom.cpp" line="2034"/>
+ <location filename="../../src/courtroom.cpp" line="2122"/>
+ <location filename="../../src/courtroom.cpp" line="2197"/>
+ <source>HOLD IT!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2039"/>
+ <location filename="../../src/courtroom.cpp" line="2127"/>
+ <location filename="../../src/courtroom.cpp" line="2204"/>
+ <source>OBJECTION!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2044"/>
+ <location filename="../../src/courtroom.cpp" line="2132"/>
+ <location filename="../../src/courtroom.cpp" line="2213"/>
+ <source>TAKE THAT!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2056"/>
+ <location filename="../../src/courtroom.cpp" line="2144"/>
+ <location filename="../../src/courtroom.cpp" line="2233"/>
+ <source>CUSTOM OBJECTION!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2060"/>
+ <location filename="../../src/courtroom.cpp" line="2148"/>
+ <location filename="../../src/courtroom.cpp" line="3028"/>
+ <source>shouts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2071"/>
+ <location filename="../../src/courtroom.cpp" line="2158"/>
+ <source>has presented evidence</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3024"/>
+ <location filename="../../src/courtroom.cpp" line="3685"/>
+ <location filename="../../src/courtroom.cpp" line="3686"/>
+ <source>has stopped the music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3657"/>
+ <location filename="../../src/courtroom.cpp" line="3699"/>
+ <source>[MISSING] %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3689"/>
+ <location filename="../../src/courtroom.cpp" line="3690"/>
<source>has played a song</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3195"/>
+ <location filename="../../src/courtroom.cpp" line="3827"/>
<source>You will now pair up with %1 if they also choose your character in return.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../src/courtroom.cpp" line="3856"/>
+ <source>You have set your offset to %1%%.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Rainbow</source>
<translation type="vanished">虹</translation>
</message>
@@ -802,307 +981,310 @@ You can also select a part of your currently typed message and use the dropdown
<translation type="vanished">シアン</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="274"/>
- <source>% offset</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/courtroom.cpp" line="277"/>
+ <location filename="../../src/courtroom.cpp" line="260"/>
<source>To front</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="278"/>
+ <location filename="../../src/courtroom.cpp" line="261"/>
<source>To behind</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="591"/>
+ <location filename="../../src/courtroom.cpp" line="604"/>
<source>Select a character you wish to pair with.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="596"/>
- <source>Change the percentage offset of your character&apos;s position from the center of the screen.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/courtroom.cpp" line="602"/>
+ <location filename="../../src/courtroom.cpp" line="623"/>
<source>Change the order of appearance for your character.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="607"/>
+ <location filename="../../src/courtroom.cpp" line="628"/>
<source>Display the list of characters to pair with.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="665"/>
+ <location filename="../../src/courtroom.cpp" line="697"/>
<source>Oops, you&apos;re muted!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="679"/>
+ <location filename="../../src/courtroom.cpp" line="711"/>
<source>Set your character&apos;s emote to play on your next message.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="683"/>
+ <location filename="../../src/courtroom.cpp" line="715"/>
<source>Set your character&apos;s supplementary background.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="689"/>
- <source>Set an &apos;iniswap&apos;, or an alternative character folder to refer to from your current character.
-Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/&lt;charname&gt;/iniswaps.ini</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/courtroom.cpp" line="698"/>
- <location filename="../../src/courtroom.cpp" line="715"/>
+ <location filename="../../src/courtroom.cpp" line="730"/>
<source>Remove the currently selected iniswap from the list and return to the original character folder.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="706"/>
+ <location filename="../../src/courtroom.cpp" line="738"/>
<source>Set a sound effect to play on your next &apos;Preanim&apos;. Leaving it on Default will use the emote-defined sound (if any).
Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/&lt;charname&gt;/soundlist.ini</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="722"/>
+ <location filename="../../src/courtroom.cpp" line="754"/>
<source>Choose an effect to play on your next spoken message.
The effects are defined in your theme/effects/effects.ini. Your character can define custom effects by
char.ini [Options] category, effects = &apos;miscname&apos; where it referes to misc/&lt;miscname&gt;/effects.ini to read the effects.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="742"/>
+ <location filename="../../src/courtroom.cpp" line="774"/>
<source>Music</source>
<translation>音楽</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="744"/>
+ <location filename="../../src/courtroom.cpp" line="776"/>
<source>Sfx</source>
<translation>効果音</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="746"/>
+ <location filename="../../src/courtroom.cpp" line="778"/>
<source>Blips</source>
<translation>ブリップ</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="791"/>
+ <location filename="../../src/courtroom.cpp" line="823"/>
<source>Change character</source>
- <translation type="unfinished"></translation>
+ <translation>キャラを変更ã—ã¾ã™</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="797"/>
+ <location filename="../../src/courtroom.cpp" line="829"/>
<source>Reload theme</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="803"/>
+ <location filename="../../src/courtroom.cpp" line="835"/>
<source>Call mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="809"/>
+ <location filename="../../src/courtroom.cpp" line="841"/>
<source>Settings</source>
- <translation type="unfinished"></translation>
+ <translation>設定</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="822"/>
+ <location filename="../../src/courtroom.cpp" line="854"/>
<source>A/M</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="827"/>
+ <location filename="../../src/courtroom.cpp" line="859"/>
<source>Preanim</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="914"/>
+ <location filename="../../src/courtroom.cpp" line="959"/>
<source>Return back to the server list.</source>
- <translation type="unfinished"></translation>
+ <translation>サーãƒãƒ¼ãƒªã‚¹ãƒˆã«æˆ»ã‚‹</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="927"/>
+ <location filename="../../src/courtroom.cpp" line="972"/>
<source>Become a spectator. You won&apos;t be able to interact with the in-character screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="1457"/>
+ <location filename="../../src/courtroom.cpp" line="1615"/>
<source>You were granted the Disable Modcalls button.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="1457"/>
- <location filename="../../src/courtroom.cpp" line="3343"/>
+ <location filename="../../src/courtroom.cpp" line="1615"/>
+ <location filename="../../src/courtroom.cpp" line="4001"/>
<source>CLIENT</source>
- <translation type="unfinished"></translation>
+ <translation>クライアント</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="2984"/>
+ <location filename="../../src/courtroom.cpp" line="3607"/>
<source>You have been banned.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3182"/>
+ <location filename="../../src/courtroom.cpp" line="3814"/>
<source>You opened the settings menu.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3201"/>
+ <location filename="../../src/courtroom.cpp" line="3835"/>
<source>You are no longer paired with anyone.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3206"/>
+ <location filename="../../src/courtroom.cpp" line="3840"/>
<source>Are you sure you typed that well? The char ID could not be recognised.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3221"/>
- <source>You have set your offset to </source>
+ <location filename="../../src/courtroom.cpp" line="3861"/>
+ <source>Your offset must be between -100% and 100%!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3228"/>
- <source>Your offset must be between -100% and 100%!</source>
+ <location filename="../../src/courtroom.cpp" line="3866"/>
+ <source>That offset does not look like one.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3233"/>
- <source>That offset does not look like one.</source>
+ <location filename="../../src/courtroom.cpp" line="3879"/>
+ <source>You have set your vertical offset to %1%%.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3886"/>
+ <source>Your vertical offset must be between -100% and 100%!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3239"/>
+ <location filename="../../src/courtroom.cpp" line="3891"/>
+ <source>That vertical offset does not look like one.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3897"/>
<source>You switched your music and area list.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3246"/>
+ <location filename="../../src/courtroom.cpp" line="3904"/>
<source>You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3260"/>
+ <location filename="../../src/courtroom.cpp" line="3918"/>
<source>Your pre-animations interrupt again.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3263"/>
+ <location filename="../../src/courtroom.cpp" line="3921"/>
<source>Your pre-animations will not interrupt text.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3274"/>
+ <location filename="../../src/courtroom.cpp" line="3932"/>
<source>Couldn&apos;t open chatlog.txt to write into.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3287"/>
+ <location filename="../../src/courtroom.cpp" line="3945"/>
<source>The IC chatlog has been saved.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3300"/>
+ <location filename="../../src/courtroom.cpp" line="3958"/>
<source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely the case file you&apos;re looking for can&apos;t be found in there.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3327"/>
+ <location filename="../../src/courtroom.cpp" line="3985"/>
<source>Too many arguments to load a case! You only need one filename, without extension.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3367"/>
- <location filename="../../src/courtroom.cpp" line="3369"/>
- <location filename="../../src/evidence.cpp" line="761"/>
- <location filename="../../src/evidence.cpp" line="763"/>
+ <location filename="../../src/courtroom.cpp" line="4034"/>
+ <location filename="../../src/courtroom.cpp" line="4036"/>
+ <location filename="../../src/evidence.cpp" line="765"/>
+ <location filename="../../src/evidence.cpp" line="767"/>
<source>UNKNOWN</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">未知</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3389"/>
+ <location filename="../../src/courtroom.cpp" line="4056"/>
<source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely that you somehow deleted it.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3404"/>
+ <location filename="../../src/courtroom.cpp" line="4071"/>
<source>You need to give a filename to save (extension not needed) and the courtroom status!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3414"/>
+ <location filename="../../src/courtroom.cpp" line="4081"/>
<source>Too many arguments to save a case! You only need a filename without extension and the courtroom status!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3441"/>
+ <location filename="../../src/courtroom.cpp" line="4108"/>
<source>Succesfully saved, edit doc and cmdoc link on the ini!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3468"/>
+ <location filename="../../src/courtroom.cpp" line="4135"/>
<source>Master</source>
<translation>マスター</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3968"/>
+ <location filename="../../src/courtroom.cpp" line="4617"/>
+ <source>Stop Current Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="4618"/>
+ <source>Play Random Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="4620"/>
<source>Expand All Categories</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3970"/>
+ <location filename="../../src/courtroom.cpp" line="4622"/>
<source>Collapse All Categories</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3974"/>
+ <location filename="../../src/courtroom.cpp" line="4626"/>
<source>Fade Out Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3980"/>
+ <location filename="../../src/courtroom.cpp" line="4632"/>
<source>Fade In</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3986"/>
+ <location filename="../../src/courtroom.cpp" line="4638"/>
<source>Synchronize</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4256"/>
+ <location filename="../../src/courtroom.cpp" line="4970"/>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4417"/>
+ <location filename="../../src/courtroom.cpp" line="5153"/>
<source>Reason:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4418"/>
+ <location filename="../../src/courtroom.cpp" line="5154"/>
<source>Call Moderator</source>
<translation>モデレーターを呼ã¶</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4426"/>
- <location filename="../../src/courtroom.cpp" line="4430"/>
+ <location filename="../../src/courtroom.cpp" line="5162"/>
+ <location filename="../../src/courtroom.cpp" line="5166"/>
<source>Error</source>
<translation>エラー</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4426"/>
+ <location filename="../../src/courtroom.cpp" line="5162"/>
<source>You must provide a reason.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4430"/>
+ <location filename="../../src/courtroom.cpp" line="5166"/>
<source>The message is too long.</source>
<translation type="unfinished"></translation>
</message>
@@ -1168,28 +1350,28 @@ You will be prompted if there&apos;s any unsaved changes.</source>
</message>
<message>
<location filename="../../src/evidence.cpp" line="158"/>
- <location filename="../../src/evidence.cpp" line="617"/>
+ <location filename="../../src/evidence.cpp" line="619"/>
<source>Transfer evidence to private inventory.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="163"/>
- <location filename="../../src/evidence.cpp" line="627"/>
+ <location filename="../../src/evidence.cpp" line="629"/>
<source>Transfer evidence to global inventory.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="263"/>
+ <location filename="../../src/evidence.cpp" line="264"/>
<source>The piece of evidence you&apos;ve been editing has changed.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="264"/>
+ <location filename="../../src/evidence.cpp" line="265"/>
<source>Do you wish to keep your changes?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="265"/>
+ <location filename="../../src/evidence.cpp" line="266"/>
<source>Name: %1
Image: %2
Description:
@@ -1197,65 +1379,80 @@ Description:
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="387"/>
+ <location filename="../../src/evidence.cpp" line="388"/>
<source>Images (*.png)</source>
<translation>イメージ (*.png)</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="456"/>
- <location filename="../../src/evidence.cpp" line="460"/>
- <location filename="../../src/evidence.cpp" line="463"/>
+ <location filename="../../src/evidence.cpp" line="457"/>
+ <location filename="../../src/evidence.cpp" line="461"/>
+ <location filename="../../src/evidence.cpp" line="464"/>
<source>Double-click to edit...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="478"/>
+ <location filename="../../src/evidence.cpp" line="479"/>
<source>Add new evidence...</source>
<translation>æ–°ã—ã„証拠を付ã‘加ãˆã‚‹...</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="556"/>
+ <location filename="../../src/evidence.cpp" line="558"/>
<source>Evidence has been modified.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="557"/>
+ <location filename="../../src/evidence.cpp" line="559"/>
<source>Do you want to save your changes?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="619"/>
+ <location filename="../../src/evidence.cpp" line="621"/>
<source>Current evidence is global. Click to switch to private.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="629"/>
+ <location filename="../../src/evidence.cpp" line="631"/>
<source>Current evidence is private. Click to switch to global.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="659"/>
+ <location filename="../../src/evidence.cpp" line="662"/>
<source>&quot;%1&quot; has been transferred.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="721"/>
+ <location filename="../../src/evidence.cpp" line="725"/>
<source>Save Inventory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="721"/>
- <location filename="../../src/evidence.cpp" line="747"/>
+ <location filename="../../src/evidence.cpp" line="725"/>
+ <location filename="../../src/evidence.cpp" line="751"/>
<source>Ini Files (*.ini)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="747"/>
+ <location filename="../../src/evidence.cpp" line="751"/>
<source>Open Inventory</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>DemoServer</name>
+ <message>
+ <location filename="../../src/demoserver.cpp" line="38"/>
+ <location filename="../../src/demoserver.cpp" line="152"/>
+ <source>Load Demo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/demoserver.cpp" line="38"/>
+ <location filename="../../src/demoserver.cpp" line="152"/>
+ <source>Demo Files (*.demo)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Discord</name>
<message>
<source>Objection!</source>
@@ -1281,69 +1478,79 @@ Description:
<context>
<name>Lobby</name>
<message>
- <location filename="../../src/lobby.cpp" line="12"/>
+ <location filename="../../src/lobby.cpp" line="15"/>
<source>Attorney Online 2</source>
- <translation type="unfinished"></translation>
+ <translation>逆転è£åˆ¤ã‚ªãƒ³ãƒ©ã‚¤ãƒ³2</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="31"/>
+ <location filename="../../src/lobby.cpp" line="35"/>
<source>Search</source>
- <translation type="unfinished"></translation>
+ <translation>検索</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="39"/>
+ <location filename="../../src/lobby.cpp" line="43"/>
<source>Name</source>
<translation>åå‰</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="94"/>
+ <location filename="../../src/lobby.cpp" line="98"/>
<source>It doesn&apos;t look like your client is set up correctly.
Did you download all resources correctly from tiny.cc/getao, including the large &apos;base&apos; folder?</source>
- <translation type="unfinished"></translation>
+ <translation>クライアントã®è¨­å®šãŒæ­£ã—ããªã„ã‹ã‚‚ã—れã¾ã›ã‚“。「tiny.cc/getaoã€ã‹ã‚‰ã®ãƒ•ァイルをダウンロードã—ã¾ã—ãŸã‹ï¼Ÿ</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="123"/>
+ <location filename="../../src/lobby.cpp" line="127"/>
<source>Version: %1</source>
- <translation type="unfinished"></translation>
+ <translation>ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %1</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="129"/>
+ <location filename="../../src/lobby.cpp" line="133"/>
<source>Settings</source>
- <translation type="unfinished"></translation>
+ <translation>設定</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="132"/>
+ <location filename="../../src/lobby.cpp" line="136"/>
<source>Allows you to change various aspects of the client.</source>
- <translation type="unfinished"></translation>
+ <translation>クライアントã§å¤‰æ›´ã§ãã¾ã™</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="176"/>
+ <location filename="../../src/lobby.cpp" line="180"/>
<source>Loading</source>
<translation>ロード中</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="180"/>
+ <location filename="../../src/lobby.cpp" line="184"/>
<source>Cancel</source>
<translation>キャンセル</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="360"/>
- <source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;2.8 Major Release development:&lt;/b&gt;&lt;br&gt;Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;2.8 Quality Assurance:&lt;/b&gt;&lt;br&gt;WillDean, Captain N, Mr M, Riel, Seimmet, Fury McFlurry,CedricDewitt, Chewable Tablets, Fantos, Futugaze,Geck, Minx, Pandae, Sierra, CrazyJC, CaseyMayCazy,GreenBowers, Robotic Overlord, Veritas, Gin-Gi&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy, the AO2 community, server hosts, game masters,case makers, content creators and players!</source>
+ <location filename="../../src/lobby.cpp" line="366"/>
+ <source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Client development:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;QA testing:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!&lt;p&gt;The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.&lt;p&gt;Running on Qt version %2 with the BASS audio engine.&lt;br&gt;APNG plugin loaded: %3&lt;p&gt;Built on %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="380"/>
- <source>About</source>
+ <location filename="../../src/lobby.cpp" line="398"/>
+ <source>Yes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="521"/>
- <source>Online: %1/%2</source>
+ <location filename="../../src/lobby.cpp" line="398"/>
+ <source>No</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="142"/>
- <location filename="../../src/lobby.cpp" line="418"/>
+ <location filename="../../src/lobby.cpp" line="400"/>
+ <source>About</source>
+ <translation>ã«ã¤ã„ã¦</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="551"/>
+ <source>Online: %1/%2</source>
+ <translation>オンライン: %1/%2</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="146"/>
+ <location filename="../../src/lobby.cpp" line="438"/>
<source>Offline</source>
<translation>オフライン</translation>
</message>
@@ -1355,28 +1562,27 @@ Did you download all resources correctly from tiny.cc/getao, including the large
<location filename="../../src/chatlogpiece.cpp" line="6"/>
<location filename="../../src/chatlogpiece.cpp" line="7"/>
<source>UNKNOWN</source>
- <translation type="unfinished"></translation>
+ <translation>未知</translation>
</message>
<message>
- <location filename="../../src/chatlogpiece.cpp" line="55"/>
<source> has played a song: </source>
- <translation type="unfinished"></translation>
+ <translation type="vanished">ã¯éŸ³æ¥½ã‚’ã‹ã‘ã‚‹</translation>
</message>
</context>
<context>
<name>debug_functions</name>
<message>
- <location filename="../../src/debug_functions.cpp" line="10"/>
+ <location filename="../../src/debug_functions.cpp" line="13"/>
<source>Error: %1</source>
<translation>エラー: %1</translation>
</message>
<message>
- <location filename="../../src/debug_functions.cpp" line="13"/>
+ <location filename="../../src/debug_functions.cpp" line="16"/>
<source>Error</source>
<translation>エラー</translation>
</message>
<message>
- <location filename="../../src/debug_functions.cpp" line="25"/>
+ <location filename="../../src/debug_functions.cpp" line="29"/>
<source>Notice</source>
<translation>通知</translation>
</message>
diff --git a/resource/translations/ao_pl.qm b/resource/translations/ao_pl.qm
index 04ec8348..5bb086d1 100644
--- a/resource/translations/ao_pl.qm
+++ b/resource/translations/ao_pl.qm
Binary files differ
diff --git a/resource/translations/ao_pl.ts b/resource/translations/ao_pl.ts
index 63838337..e3a9974d 100644
--- a/resource/translations/ao_pl.ts
+++ b/resource/translations/ao_pl.ts
@@ -4,26 +4,26 @@
<context>
<name>AOApplication</name>
<message>
- <location filename="../../src/aoapplication.cpp" line="129"/>
+ <location filename="../../src/aoapplication.cpp" line="133"/>
<source>Disconnected from server.</source>
<translation>Odłączono od serwera.</translation>
</message>
<message>
- <location filename="../../src/aoapplication.cpp" line="152"/>
+ <location filename="../../src/aoapplication.cpp" line="156"/>
<source>Error connecting to master server. Will try again in %1 seconds.</source>
<translation>Błąd podczas łączenia się z głównym serwerem. Spróbuj ponownie za %1 sekundy.</translation>
</message>
<message>
- <location filename="../../src/aoapplication.cpp" line="157"/>
+ <location filename="../../src/aoapplication.cpp" line="161"/>
<source>There was an error connecting to the master server.
We deploy multiple master servers to mitigate any possible downtime, but the client appears to have exhausted all possible methods of finding and connecting to one.
Please check your Internet connection and firewall, and please try again.</source>
<translation>Odkryto błąd podczas łączenia się z głównym serwerem.
-Używamy wielu master serwerów, aby zminimalizować każdą możliwą przerwę, ale klient wyczerpał jakąkolwiek możliwość znalezienia i połączenia się z jednym.
+Używamy wielu master serwerów, aby zminimalizować każdą możliwą przerwę, ale klient wyczerpał wszystkie możliwe metody znalezienia i połączenia się z jednym.
Sprawdź swoje połączenie internetowe oraz zaporę ogniową i spróbuj ponownie.</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="94"/>
+ <location filename="../../src/packet_distribution.cpp" line="93"/>
<source>Outdated version! Your version: %1
Please go to aceattorneyonline.com to update.</source>
<translation>Nieaktualna wersja! Twoja wersja: %1
@@ -36,58 +36,55 @@ Have a nice day.</source>
Życzymy miłego dnia.</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="253"/>
+ <location filename="../../src/packet_distribution.cpp" line="263"/>
<source>Attorney Online 2</source>
<translatorcomment>Prawnik w Internecie 2</translatorcomment>
<translation></translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="281"/>
+ <location filename="../../src/packet_distribution.cpp" line="289"/>
<source>Loading</source>
<translation>Åadowanie</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="381"/>
<source>Loading evidence:
%1/%2</source>
- <translation>Åadowanie dowodów:
+ <translation type="vanished">Åadowanie dowodów:
%1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="416"/>
- <location filename="../../src/packet_distribution.cpp" line="510"/>
+ <location filename="../../src/packet_distribution.cpp" line="374"/>
<source>Loading music:
%1/%2</source>
<translation>Åadowanie muzyki:
%1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="334"/>
- <location filename="../../src/packet_distribution.cpp" line="483"/>
+ <location filename="../../src/packet_distribution.cpp" line="346"/>
<source>Loading chars:
%1/%2</source>
<translation>Åadowanie postaci:
%1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="692"/>
+ <location filename="../../src/packet_distribution.cpp" line="578"/>
<source>You have been kicked from the server.
Reason: %1</source>
- <translation>Zostałeś wyrzucony z tego serwera.
+ <translation>Zostałeś/aś wyrzucony/a z tego serwera.
Powód: %1</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="700"/>
+ <location filename="../../src/packet_distribution.cpp" line="586"/>
<source>You have been banned from the server.
Reason: %1</source>
- <translation>Zostałeś zbanowany z tego serwera.
+ <translation>Zostałeś/aś zbanowany/a z tego serwera.
Powód: %1</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="708"/>
+ <location filename="../../src/packet_distribution.cpp" line="594"/>
<source>You are banned on this server.
Reason: %1</source>
- <translation>JesteÅ› zbanowany na tym serwerze.
+ <translation>JesteÅ› zbanowany/a na tym serwerze.
Powód: %1</translation>
</message>
</context>
@@ -143,7 +140,7 @@ Powód: %1</translation>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="46"/>
<source>Gameplay</source>
- <translation>Rozgrywka</translation>
+ <translation>Gra</translation>
</message>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="62"/>
@@ -153,7 +150,7 @@ Powód: %1</translation>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="64"/>
<source>Sets the theme used in-game. If the new theme changes the lobby&apos;s look as well, you&apos;ll need to reload the lobby for the changes to take effect, such as by joining a server and leaving it.</source>
- <translation>Ustawia motyw używany w grze. Jeżeli nowy motyw zmienia wygląd poczekalni, będziesz musiał ją również odświeżyć, aby zmiany zaczęły działać, np. poprzez dołączenie do serwera i wyjście z niego.</translation>
+ <translation>Ustawia motyw używany w grze. Jeżeli nowy motyw zmienia wygląd poczekalni, będziesz musiał(a) ją również odświeżyć, aby zmiany zaczęły działać, np. poprzez dołączenie do serwera i wyjście z niego.</translation>
</message>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="95"/>
@@ -163,7 +160,7 @@ Powód: %1</translation>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="97"/>
<source>If ticked, new messages will appear at the bottom (like the OOC chatlog). The traditional (AO1) behaviour is equivalent to this being unticked.</source>
- <translation>Jeżeli zaznaczone, nowe wiadomości zaczną się pojawiać na dole (tak jak na czacie OOC). Tradycyjne (AO1) zachowanie jest równoważne do tego bycia nie zaznaczonym.</translation>
+ <translation>Jeżeli zaznaczone, nowe wiadomości zaczną się pojawiać na dole (tak jak na czacie OOC). Tradycyjne (AO1) zachowanie jest równoważne do tego bycia odznaczonym.</translation>
</message>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="110"/>
@@ -173,45 +170,114 @@ Powód: %1</translation>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="111"/>
<source>The amount of messages the IC chatlog will keep before deleting older messages. A value of 0 or below counts as &apos;infinite&apos;.</source>
- <translation>Ilość wiadomości, jakie dziennik IC będzie pokazywał zanim usunie starsze wiadomości. Wartość 0 albo niżej, liczy się jako &apos;nieskończone&apos;.</translation>
+ <translation>Ilość wiadomości, jakie dziennik IC będzie pokazywał zanim usunie starsze wiadomości. Wartość 0 lub niżej, liczy się jako &apos;nieskończone&apos;.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="133"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="125"/>
+ <source>Log newline:</source>
+ <translation>Oddzielenia w dzienniku:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="127"/>
+ <source>If ticked, new messages will appear separated, with the message coming on the next line after the name. When unticked, it displays it as &apos;name: message&apos;.</source>
+ <translation>Jeśli zaznaczone, nowe wiadomości będą pojawiać się oddzielone, z wiadomością w kolejnym wierszu po nicku. Jeżeli odznaczone, będzie się pokazywać w formacie &apos;nick: wiadomość&quot;.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="140"/>
+ <source>Log margin:</source>
+ <translation>Margines dziennika:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="141"/>
+ <source>The distance in pixels between each entry in the IC log. Default: 0.</source>
+ <translation>Dystans w pikselach pomiędzy każdym wpisem w dzienniku IC. Domyślnie: 0.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="155"/>
+ <source>Log timestamp:</source>
+ <translation>Daty w dzienniku:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="157"/>
+ <source>If ticked, log will contain a timestamp in UTC before the name.</source>
+ <translation>Jeżeli zaznaczone, dziennik będzie pokazywać datę w UTC przed nickiem.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="168"/>
+ <source>Log IC actions:</source>
+ <translation>Zapisuj akcje IC:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="170"/>
+ <source>If ticked, log will show IC actions such as shouting and presenting evidence.</source>
+ <translation>Jeśli zaznaczone, dziennik będzie pokazywać akcje IC takie jak krzyki i prezentowanie dowodów.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="182"/>
+ <source>Text Stay Time:</source>
+ <translation>Czas Pozostania Tekstu:</translation>
+ </message>
+ <message>
+ <source>Minimum amount of time (in miliseconds) an IC message must stay on screen before the next IC message is shown, acting as a &apos;queue&apos;. Set to 0 to disable this behaivor.</source>
+ <translation type="vanished">Minimalna ilość czasu (w milisekundach), w której wiadomość IC musi pozostać na ekranie, zanim kolejna zostanie wyświetlona, działa niczym &apos;kolejka&apos;. Ustaw na 0, aby wyłączyć tą funkcję.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="197"/>
+ <source>Desynchronize IC Logs:</source>
+ <translation>Desynchronizacja Dziennika IC:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="199"/>
+ <source>If ticked, log will show messages as-received, while viewport will parse according to the queue (Text Stay Time).</source>
+ <translation>Jeżeli zaznaczone, dziennik pokaże wiadomości jako odebrane, podczas gdy okno będzie analizować kolejkę (Czas Pozostania Tekstu).</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="210"/>
+ <source>Instant Objection:</source>
+ <translation>Natychmiastowy Sprzeciw:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="212"/>
+ <source>If Text Stay Time is more than 0, instant objection will skip queued messages instead of waiting to catch up.</source>
+ <translation>Jeśli wartość Czasu Pozostania Tekstu jest większa, niż 0, natychmiastowe sprzeciwy pominą kolejkowane wiadomości, zamiast czekania na nadrobienie zaległości.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="231"/>
<source>Default username:</source>
<translation>Domyślna nazwa użytkownika:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="135"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="233"/>
<source>Your OOC name will be automatically set to this value when you join a server.</source>
- <translation>Twoja nazwa OOC będzie ustawiana automatycznie do tej wartości, kiedy dołączysz na serwer.</translation>
+ <translation>Twoja nazwa OOC będzie automatycznie ustawiana do tej wartości, gdy dołączysz na serwer.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="148"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="246"/>
<source>Custom shownames:</source>
<translation>Niestandardowe ksywki:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="150"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="248"/>
<source>Gives the default value for the in-game &apos;Custom shownames&apos; tickbox, which in turn determines whether the client should display custom in-character names.</source>
<translation>Daje domyślną wartość przyciskowi &apos;Niestandardowe ksywki&apos;, który określa, czy klient powinien pokazywać niestandardowe nazwy IC.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="170"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="268"/>
<source>Backup MS:</source>
<translation>Kopia zapasowa master serwera:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="172"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="270"/>
<source>If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address.</source>
<translation>Jeśli wbudowane szukanie serwerów zawiedzie, gra spróbuje użyć adresu podanego tutaj i użyje go jako adresu zapasowego master serwera.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="185"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="283"/>
<source>Discord:</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="187"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="285"/>
<source>Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for.</source>
<translation>Pozwala innym na Discordzie zobaczyć na jakim serwerze się znajdujesz, jaką postać używasz i jak długo grałeś.</translation>
</message>
@@ -224,292 +290,307 @@ Powód: %1</translation>
<translation type="obsolete">Pozwala na wstrząśnięcia ekranu i błyśnięcia. Wyłącz to, jeśli przejmujesz się lub masz problemy z światłoczułością oraz/lub napady padaczkowe.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="200"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="183"/>
+ <source>Minimum amount of time (in miliseconds) an IC message must stay on screen before the next IC message is shown, acting as a &apos;queue&apos;. Set to 0 to disable this behavior.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="298"/>
<source>Language:</source>
<translation>Język:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="202"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="300"/>
<source>Sets the language if you don&apos;t want to use your system language.</source>
<translation>Ustawia język, jeśli nie chcesz używać języka systemowego.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="208"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="306"/>
<source> - Keep current setting</source>
<translation> - Zostaw obecne ustawienia</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="222"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="320"/>
<source>Allow Screenshake:</source>
<translation>Zezwalaj Wstrząśnięcia:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="224"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="322"/>
<source>Allows screenshaking. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source>
<translation>Zezwala na wstrząśnięcia ekranu. Wyłącz to, jeśli przejmujesz się lub masz problemy z światłoczułością oraz/lub z napadami padaczkowymi.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="236"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="334"/>
<source>Allow Effects:</source>
<translation>Zezwalaj Efekty:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="238"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="336"/>
<source>Allows screen effects. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source>
<translation>Zezwala na efekty ekranowe. Wyłącz to, jeśli przejmujesz się lub masz problemy z światłoczułością oraz/lub z napadami padaczkowymi.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="250"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="348"/>
<source>Network Frame Effects:</source>
<translation>Efekty Network Frame:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="251"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="349"/>
<source>Send screen-shaking, flashes and sounds as defined in the char.ini over the network. Only works for servers that support this functionality.</source>
<translation>Wysyła wstrząśnięcia ekranu, błyśnięcia i dźwięki, jak zdefiniowano w pliku char.ini, przez sieć. Działa tylko w przypadku serwerów, które obsługują tę funkcję.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="264"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="362"/>
<source>Colors in IC Log:</source>
- <translation>Kolory w dzienniku IC:</translation>
+ <translation>Kolory w Dzienniku IC:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="266"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="364"/>
<source>Use the markup colors in the server IC chatlog.</source>
<translation>Użyj znaczników kolorów w serwerowym dzienniku IC.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="277"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="375"/>
<source>Sticky Sounds:</source>
<translation>Lepkie Dźwięki:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="279"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="377"/>
<source>Turn this on to prevent the sound dropdown from clearing the sound after playing it.</source>
<translation>Włącz to, aby zapobiec listę dźwięków przed odznaczeniem zaznaczonego dźwięku po jego odtworzeniu.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="291"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="389"/>
<source>Sticky Effects:</source>
<translation>Lepkie Efekty:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="293"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="391"/>
<source>Turn this on to prevent the effects dropdown from clearing the effect after playing it.</source>
<translation>Włącz to, aby zapobiec listę efektów przed odznaczeniem zaznaczonego efektu po jego odtworzeniu.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="306"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="404"/>
<source>Sticky Preanims:</source>
<translation>Lepkie Przed-animacje:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="308"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="406"/>
<source>Turn this on to prevent preanimation checkbox from clearing after playing the emote.</source>
<translation>Włącz to, aby zapobiec przycisku wyboru przed-animacji od odznaczenia się po odegraniu emotki.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="320"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="418"/>
<source>Custom Chatboxes:</source>
<translation>Niestandardowe Okna Czatu:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="322"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="420"/>
<source>Turn this on to allow characters to define their own custom chat box designs.</source>
<translation>Włącz to, aby pozwolić postaciom definiować swoje własne designy okienek czatu.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="340"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="438"/>
<source>Callwords</source>
<translation>Zawołania</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="367"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="465"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!&lt;br&gt;Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Wpisz tyle zawołań, ile dusza zapragnie. Wielkość liter nie ma znaczenia. Miej na uwadze, aby każde zawołanie było w swojej lini!&lt;br&gt;Nie zostawiaj spacji na końcu -- zostaniesz zaalarmowany za każdym razem, kiedy ktoś użyje spacji w swojej wiadomości.&lt;/body&gt;&lt;/html&gt;</translation>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Wpisz tyle zawołań, ile dusza zapragnie. Wielkość liter nie ma znaczenia. Miej na uwadze, aby każde zawołanie było w swoim wierszu!&lt;br&gt;Nie zostawiaj spacji na końcu -- zostaniesz zaalarmowany za każdym razem, kiedy ktoś użyje spacji w swojej wiadomości.&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="377"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="475"/>
<source>Audio</source>
<translation>Dźwięk</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="391"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="489"/>
<source>Audio device:</source>
<translation>Urządzenie dźwiękowe:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="392"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="490"/>
<source>Sets the audio device for all sounds.</source>
<translation>Ustawia urządzenie dźwiękowe dla wszystkich dźwięków.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="435"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="523"/>
<source>Music:</source>
<translation>Muzyka:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="436"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="524"/>
<source>Sets the music&apos;s default volume.</source>
<translation>Ustawia domyślną głośność muzyki.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="450"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="538"/>
<source>SFX:</source>
<translation>Efekty dźwiękowe (SFX):</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="452"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="540"/>
<source>Sets the SFX&apos;s default volume. Interjections and actual sound effects count as &apos;SFX&apos;.</source>
- <translation>Ustawia domyślną głośność efektów dźwiękowych (SFX). Sprzeciwy i same efekty specjalne są zaliczane jako &apos;SFX&apos;.</translation>
+ <translation>Ustawia domyślną głośność efektów dźwiękowych (SFX). Sprzeciwy, jak i same efekty specjalne są zaliczane jako &apos;SFX&apos;.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="466"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="554"/>
<source>Blips:</source>
<translation>Blipy:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="468"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="556"/>
<source>Sets the volume of the blips, the talking sound effects.</source>
<translation>Ustawia głośność blipów, efektów dźwiękowych mówienia.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="490"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="578"/>
<source>Blip rate:</source>
<translation>Szybkość blipów:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="492"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="580"/>
<source>Sets the delay between playing the blip sounds.</source>
<translation>Ustawia opóźnienie pomiędzy graniem blipów.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="500"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="588"/>
<source>Play a blip sound &quot;once per every X symbols&quot;, where X is the blip rate.</source>
<translation>Zagraj dźwięk blipa &quot;raz na X symboli&quot;, gdzie X to tempo blipów.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="507"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="595"/>
<source>Blank blips:</source>
<translatorcomment>The &apos;blip&apos; isn&apos;t an accurate polish representation of this english word.</translatorcomment>
<translation>Puste blipy:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="509"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="597"/>
<source>If true, the game will play a blip sound even when a space is &apos;being said&apos;.</source>
<translation>Jeżeli zaznaczone, gra zagra dźwięk blip za każdym razem spacja &apos;jest mówiona&apos;.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="521"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="609"/>
<source>Enable Looping SFX:</source>
<translation>Włącz pętlące się efekty dźwiękowe (SFX):</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="522"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="610"/>
<source>If true, the game will allow looping sound effects to play on preanimations.</source>
<translation>Jeśli zaznaczone, gra zezwoli na pętlące się efekty dźwiękowe (SFX) na odtwarzanie podczas animacji.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="534"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="622"/>
<source>Kill Music On Objection:</source>
<translation>Przerwij muzykÄ™ na czas sprzeciwu:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="536"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="624"/>
<source>If true, AO2 will stop the music for you when you or someone else does &apos;Objection!&apos;.</source>
- <translation>Jeśli zaznaczone, gra przerwie muzykę, kiedy ktoś się sprzeciwi (Objection!).</translation>
+ <translation>Jeśli zaznaczone, gra przerwie muzykę, kiedy ktoś się sprzeciwi.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="793"/>
+ <source>Automatic Logging:</source>
+ <translation>Auto Logowanie:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="795"/>
+ <source>If checked, all logs will be automatically written in the /logs folder.</source>
+ <translation>Jeśli zaznaczone, dziennik będzie automatycznie zapisywany w twoim folderze /logs.</translation>
</message>
<message>
<source>If true, the game will stop music when someone objects, like in the actual games.</source>
<translation type="obsolete">Jeśli zaznaczone, gra przerwie muzykę, kiedy ktoś sprzeciwi się, tak jak w oryginalnych grach.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="548"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="636"/>
<source>Casing</source>
<translation>Rozprawy</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="565"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="653"/>
<source>This server supports case alerts.</source>
<translation>Ten serwer wspiera komunikaty rozpraw.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="568"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="656"/>
<source>This server does not support case alerts.</source>
<translation>Ten serwer nie wspiera komunikatów rozpraw.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="569"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="657"/>
<source>Pretty self-explanatory.</source>
<translation>Dosyć oczywiste.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="578"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="666"/>
<source>Casing:</source>
<translation>Rozprawy:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="580"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="668"/>
<source>If checked, you will get alerts about case announcements.</source>
<translation>Jeżeli zaznaczone, dostaniesz komunikaty o ogłoszeniach rozpraw.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="596"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="684"/>
<source>Defense:</source>
<translation>Obrona:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="597"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="685"/>
<source>If checked, you will get alerts about case announcements if a defense spot is open.</source>
<translation>Jeśli zaznaczone, dostaniesz komunikaty o ogłoszeniach rozpraw, jeśli miejsce obrony jest otwarte.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="611"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="699"/>
<source>Prosecution:</source>
<translation>Prokuratura:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="613"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="701"/>
<source>If checked, you will get alerts about case announcements if a prosecutor spot is open.</source>
<translation>Jeśli zaznaczone, dostaniesz komunikaty o ogłoszeniach rozpraw, jeśli miejsce prokuratora jest otwarte.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="627"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="715"/>
<source>Judge:</source>
<translation>Sędzia:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="628"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="716"/>
<source>If checked, you will get alerts about case announcements if the judge spot is open.</source>
<translation>Jeśli zaznaczone, dostaniesz komunikaty o ogłoszeniach rozpraw, jeśli miejsce sędzi jest otwarte.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="642"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="730"/>
<source>Juror:</source>
<translation>Åawnik:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="643"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="731"/>
<source>If checked, you will get alerts about case announcements if a juror spot is open.</source>
<translation>Jeżeli zaznaczone, dostaniesz komunikaty o ogłoszeniach rozpraw, jeśli miejsce ławnika jest otwarte.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="657"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="745"/>
<source>Stenographer:</source>
<translation>Stenograf:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="659"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="747"/>
<source>If checked, you will get alerts about case announcements if a stenographer spot is open.</source>
<translation>Jeżeli zaznaczone, dostaniesz komunikaty o ogłoszeniach rozpraw, jeśli miejsce stenografa jest otwarte.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="673"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="761"/>
<source>CM:</source>
<translation>ZarzÄ…dca rozpraw (CM):</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="675"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="763"/>
<source>If checked, you will appear amongst the potential CMs on the server.</source>
<translation>Jeśli zaznaczone, pojawisz się wśród potencjalnych zarządców rozpraw (CM) na serwerze.</translation>
</message>
@@ -522,12 +603,12 @@ Powód: %1</translation>
<translation type="obsolete">Jeżeli zaznaczone, pojawisz się wśród potencjalnych świadków na serwerze.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="689"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="777"/>
<source>Hosting cases:</source>
<translation>Hostowane rozprawy:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="691"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="779"/>
<source>If you&apos;re a CM, enter what cases you are willing to host.</source>
<translation>Jeżeli jesteś zarządcą rozpraw (CM), wpisz jakie rozprawy jesteś chętny hostowania.</translation>
</message>
@@ -535,28 +616,28 @@ Powód: %1</translation>
<context>
<name>Courtroom</name>
<message>
- <location filename="../../src/charselect.cpp" line="21"/>
+ <location filename="../../src/charselect.cpp" line="23"/>
<source>Password</source>
<translation>Hasło</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="27"/>
+ <location filename="../../src/charselect.cpp" line="29"/>
<source>Spectator</source>
<translation>Spektator</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="30"/>
- <location filename="../../src/courtroom.cpp" line="175"/>
+ <location filename="../../src/charselect.cpp" line="32"/>
+ <location filename="../../src/courtroom.cpp" line="153"/>
<source>Search</source>
<translation>Wyszukaj</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="35"/>
+ <location filename="../../src/charselect.cpp" line="37"/>
<source>Passworded</source>
<translation>Zahasłowany</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="39"/>
+ <location filename="../../src/charselect.cpp" line="41"/>
<source>Taken</source>
<translation>Zajęty</translation>
</message>
@@ -565,63 +646,63 @@ Powód: %1</translation>
<translation type="obsolete">Nie znaleziono %1</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="232"/>
+ <location filename="../../src/charselect.cpp" line="239"/>
<source>Generating chars:
%1/%2</source>
<translation>Generowanie postaci:
-%1.%2</translation>
+%1/%2</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="148"/>
+ <location filename="../../src/courtroom.cpp" line="126"/>
<source>Showname</source>
<translation>Ksywka</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="152"/>
+ <location filename="../../src/courtroom.cpp" line="130"/>
<source>Message</source>
<translation>Wiadomość</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="167"/>
+ <location filename="../../src/courtroom.cpp" line="145"/>
<source>Name</source>
<translation>Nazwa</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="217"/>
+ <location filename="../../src/courtroom.cpp" line="195"/>
<source>Pre</source>
<translation>przed-</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="220"/>
+ <location filename="../../src/courtroom.cpp" line="198"/>
<source>Flip</source>
<translation>Odwróć</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="224"/>
+ <location filename="../../src/courtroom.cpp" line="202"/>
<source>Guard</source>
<translation>Na Służbie (mod)</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="228"/>
+ <location filename="../../src/courtroom.cpp" line="206"/>
<source>Additive</source>
- <translatorcomment>I&apos;m not sure about this one.</translatorcomment>
- <translation>Dodatek</translation>
+ <translatorcomment>I&apos;m not sure about this one either.The previous form was &quot;Dodatek&quot;.</translatorcomment>
+ <translation>Kontynuacja</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="233"/>
- <location filename="../../src/courtroom.cpp" line="815"/>
+ <location filename="../../src/courtroom.cpp" line="211"/>
+ <location filename="../../src/courtroom.cpp" line="847"/>
<source>Casing</source>
<translation>Rozprawa</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="238"/>
+ <location filename="../../src/courtroom.cpp" line="216"/>
<source>Shownames</source>
<translation>Ksywki</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="241"/>
+ <location filename="../../src/courtroom.cpp" line="219"/>
<source>Immediate</source>
- <translation>Bez ociÄ…gania siÄ™</translation>
+ <translation>Natychmiastowe</translation>
</message>
<message>
<source>White</source>
@@ -652,209 +733,302 @@ Powód: %1</translation>
<translation type="obsolete">To nic nie robi, ale proszÄ™ bardzo.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3344"/>
+ <location filename="../../src/courtroom.cpp" line="3973"/>
<source>You need to give a filename to load (extension not needed)! Make sure that it is in the `base/cases/` folder, and that it is a correctly formatted ini.
Cases you can load: %1</source>
- <translation>Musisz podać nazwę pliku, którego chcesz załadować (rozszerzenie nie potrzebne!) Upewnij się, że jest w folderze `base/cases/` i że jest to poprawnie sformatowane ini.
+ <translation>Musisz podać nazwę pliku, którego chcesz załadować (rozszerzenie nie jest potrzebne!) Upewnij się, że jest w folderze `base/cases/` i że jest to poprawnie sformatowane ini.
Rozprawy które możesz załadować: %1</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3372"/>
+ <location filename="../../src/courtroom.cpp" line="4002"/>
<source>Case made by %1.</source>
- <translation>Rozprawa zrobiona przez %1.</translation>
+ <translation>Rozprawa stworzona przez %1.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3382"/>
+ <location filename="../../src/courtroom.cpp" line="4012"/>
<source>Navigate to %1 for the CM doc.</source>
<translation>Przejdź do %1, aby dojść do dokumentu CM.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3406"/>
+ <location filename="../../src/courtroom.cpp" line="4044"/>
<source>Your case &quot;%1&quot; was loaded!</source>
<translation>Twoja rozprawa &quot;%1&quot; została wczytana!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="767"/>
- <location filename="../../src/courtroom.cpp" line="3504"/>
+ <location filename="../../src/courtroom.cpp" line="799"/>
+ <location filename="../../src/courtroom.cpp" line="4142"/>
<source>Server</source>
<translation>Serwer</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="143"/>
+ <location filename="../../src/courtroom.cpp" line="121"/>
+ <location filename="../../src/courtroom.cpp" line="3652"/>
+ <location filename="../../src/courtroom.cpp" line="3694"/>
+ <location filename="../../src/courtroom.cpp" line="4415"/>
<source>None</source>
<translation>Nic</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="749"/>
+ <location filename="../../src/courtroom.cpp" line="254"/>
+ <source>% x offset</source>
+ <translation>% wyrówanie x</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="257"/>
+ <source>% y offset</source>
+ <translation>% wyrówanie y</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="609"/>
+ <source>Change the horizontal percentage offset of your character&apos;s position from the center of the screen.</source>
+ <translation>Zmień procent poziomego wyrównania pozycji twojej postaci licząc od środka ekranu.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="616"/>
+ <source>Change the vertical percentage offset of your character&apos;s position from the center of the screen.</source>
+ <translation>Zmień procent pionowego wyrównania pozycji twojej postaci licząc od środka ekranu.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="721"/>
+ <source>Set an &apos;iniswap&apos;, or an alternative character folder to refer to from your current character.
+Edit by typing and pressing Enter, [X] to remove. This saves to your base/iniswaps.ini</source>
+ <translation>Ustaw &apos;iniswap&apos; albo alternatywny folder postaci, aby odnosił się do twojej obecnej postaci.
+Edytuj poprzez wciśnięcie Enter po wpisaniu tekstu, [X] aby usunąć. Zapisuje się to w base/characters/iniswaps.ini</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="746"/>
+ <source>Remove the currently selected sound effect.</source>
+ <translation>Wycofaj obecny zaznaczony efekt dźwiękowy.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="781"/>
<source>Hold It!</source>
- <translation>(Hold It)! Zaczekaj!</translation>
+ <translation>Zaczekaj!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="750"/>
- <location filename="../../src/courtroom.cpp" line="756"/>
- <location filename="../../src/courtroom.cpp" line="762"/>
+ <location filename="../../src/courtroom.cpp" line="782"/>
+ <location filename="../../src/courtroom.cpp" line="788"/>
+ <location filename="../../src/courtroom.cpp" line="794"/>
<source>When this is turned on, your next in-character message will be a shout!</source>
- <translation>Kiedy to jest włączone, twoja następna wiadomość IC będzie krzykiem!</translation>
+ <translation>Kiedy jest to włączone, twoja następna wiadomość IC będzie krzykiem!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="755"/>
+ <location filename="../../src/courtroom.cpp" line="787"/>
<source>Objection!</source>
- <translation>(Objection!) Sprzeciw!</translation>
+ <translation>Sprzeciw!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="761"/>
+ <location filename="../../src/courtroom.cpp" line="793"/>
<source>Take That!</source>
- <translation>(Take That!) Weź To!</translation>
+ <translation>Trzymaj To!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="769"/>
+ <location filename="../../src/courtroom.cpp" line="801"/>
<source>Toggle between server chat and global AO2 chat.</source>
<translation>Przełączaj pomiędzy czatem serwerowym i globalnym czatem AO2.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="773"/>
- <location filename="../../src/courtroom.cpp" line="777"/>
- <location filename="../../src/courtroom.cpp" line="783"/>
- <location filename="../../src/courtroom.cpp" line="787"/>
+ <location filename="../../src/courtroom.cpp" line="805"/>
+ <location filename="../../src/courtroom.cpp" line="809"/>
+ <location filename="../../src/courtroom.cpp" line="815"/>
+ <location filename="../../src/courtroom.cpp" line="819"/>
<source>This will display the animation in the viewport as soon as it is pressed.</source>
<translation>To będzie wyświetlać animację w oknie, jak tylko zostanie to wciśnięte.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="781"/>
+ <location filename="../../src/courtroom.cpp" line="813"/>
<source>Guilty!</source>
<translation>Winny!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="794"/>
+ <location filename="../../src/courtroom.cpp" line="826"/>
<source>Bring up the Character Select Screen and change your character.</source>
<translation>Wyświetl ekran zmiany postaci i zmień swoją postać.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="800"/>
+ <location filename="../../src/courtroom.cpp" line="832"/>
<source>Refresh the theme and update all of the ui elements to match.</source>
<translation>Odśwież motyw i uaktualnij wszystkie elementy UI, aby dopasować.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="806"/>
+ <location filename="../../src/courtroom.cpp" line="838"/>
<source>Request the attention of the current server&apos;s moderator.</source>
- <translation>PoproÅ› o uwagÄ™ moderatora obecnego serwera.</translation>
+ <translation>Zażądaj uwagę moderatora obecnego serwera.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="812"/>
+ <location filename="../../src/courtroom.cpp" line="844"/>
<source>Allows you to change various aspects of the client.</source>
<translation>Umożliwia zmianę różnych aspektów klienta.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="818"/>
+ <location filename="../../src/courtroom.cpp" line="850"/>
<source>An interface to help you announce a case (you have to be a CM first to be able to announce cases)</source>
<translation>Interfejs, który pomoże ci ogłosić rozprawę (musisz być zarządcą rozpraw (CM), aby móc ogłaszać rozprawy)</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="824"/>
+ <location filename="../../src/courtroom.cpp" line="856"/>
<source>Switch between Areas and Music lists</source>
<translation>Przełącz pomiędzy listami Obszarów i Muzyki</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="829"/>
+ <location filename="../../src/courtroom.cpp" line="861"/>
<source>Play a single-shot animation as defined by the emote when checked.</source>
<translation>Odegraj pojedyńczą animację, jak zdefiniowano przez emotkę, gdy zaznaczone.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="833"/>
+ <location filename="../../src/courtroom.cpp" line="864"/>
<source>If preanim is checked, display the input text immediately as the animation plays concurrently.</source>
<translation>Jeśli przed-animacja jest zaznaczona, wyświetl wpisany tekst natychmiastowo, jednocześnie podczas odgrywania animacji.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="837"/>
+ <location filename="../../src/courtroom.cpp" line="882"/>
<source>Mirror your character&apos;s emotes when checked.</source>
<translation>Odzwierciedlij emotki twojej postaci, gdy zaznaczone.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="841"/>
+ <location filename="../../src/courtroom.cpp" line="886"/>
<source>Add text to your last spoken message when checked.</source>
<translation>Dodaj tekst do twojej ostatniej wiadomości, gdy zaznaczone.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="845"/>
+ <location filename="../../src/courtroom.cpp" line="890"/>
<source>Do not listen to mod calls when checked, preventing them from playing sounds or focusing attention on the window.</source>
<translation>Nie słuchaj wezwań moda, gdy zaznaczone, zapobiegając grania dźwięków oraz skupiania uwagi na okienko.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="849"/>
+ <location filename="../../src/courtroom.cpp" line="894"/>
<source>Lets you receive case alerts when enabled.
(You can set your preferences in the Settings!)</source>
<translation>Pozwala ci otrzymywać komunikaty rozpraw, gdy włączone.
(Możesz ustawić swoje preferencje w Ustawieniach!)</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="854"/>
+ <location filename="../../src/courtroom.cpp" line="899"/>
<source>Display customized shownames for all users when checked.</source>
<translation>Wyświetl niestandardowe ksywki dla wszystkich użytkowników, gdy zaznaczone.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="857"/>
+ <location filename="../../src/courtroom.cpp" line="902"/>
<source>Custom Shout!</source>
- <translation>Niestandardowy Krzyk (sprzeciw)!</translation>
+ <translation>Niestandardowy Krzyk!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="860"/>
+ <location filename="../../src/courtroom.cpp" line="905"/>
<source>This will display the custom character-defined animation in the viewport as soon as it is pressed.
To make one, your character&apos;s folder must contain custom.[webp/apng/gif/png] and custom.[wav/ogg/opus] sound effect</source>
- <translation>To będzie wyświetlać zdefiniowanej animacji niestandardowej postaci w oknie, jak tylko zostanie to wciśnięte.
-Aby zrobić coś takiego, folder twojej postaci musi zawierać niestandardowe [webp/apng/gif/png] i niestandardowe [wav/ogg/opus] efekty dźwiękowe</translation>
+ <translation>Będzie to wyświatlać animację zdefiniowaną przez niestandardową postaći w oknie, jak tylko zostanie to wciśnięte.
+Aby stworzyć coś takiego, folder twojej postaci musi zawierać niestandardowe [webp/apng/gif/png] i niestandardowe [wav/ogg/opus] efekty dźwiękowe</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="868"/>
+ <location filename="../../src/courtroom.cpp" line="913"/>
<source>Play realization sound and animation in the viewport on the next spoken message when checked.</source>
<translation>Zagraj dźwięk realizacji i animację w oknie podczas następnej wiadomości, gdy zaznaczone.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="874"/>
+ <location filename="../../src/courtroom.cpp" line="919"/>
<source>Shake the screen on next spoken message when checked.</source>
<translation>Wstrząśnij ekranem podczas następnej wiadomości, gdy zaznaczone.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="880"/>
+ <location filename="../../src/courtroom.cpp" line="925"/>
<source>Display the list of character folders you wish to mute.</source>
<translation>Wyświetl listę folderów postaci, których chcesz zmutować.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="884"/>
- <location filename="../../src/courtroom.cpp" line="892"/>
+ <location filename="../../src/courtroom.cpp" line="929"/>
+ <location filename="../../src/courtroom.cpp" line="937"/>
<source>Increase the health bar.</source>
<translation>Zwiększ pasek życia.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="888"/>
- <location filename="../../src/courtroom.cpp" line="896"/>
+ <location filename="../../src/courtroom.cpp" line="933"/>
+ <location filename="../../src/courtroom.cpp" line="941"/>
<source>Decrease the health bar.</source>
<translation>Obniż pasek życia.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="900"/>
+ <location filename="../../src/courtroom.cpp" line="945"/>
<source>Change the text color of the spoken message.
You can also select a part of your currently typed message and use the dropdown to change its color!</source>
- <translation>Zmień kolor tekstu dla twojej wiadomości.
+ <translation>Zmień kolor tekstu twojej wiadomości.
Możesz również zaznaczyć część twojej obecnie pisanej wiadomości i użyć listy aby zmienić jej kolor!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="913"/>
+ <location filename="../../src/courtroom.cpp" line="958"/>
<source>Back to Lobby</source>
<translation>Powrót do poczekalni</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3090"/>
- <location filename="../../src/courtroom.cpp" line="4508"/>
- <location filename="../../src/courtroom.cpp" line="4515"/>
+ <location filename="../../src/courtroom.cpp" line="2034"/>
+ <location filename="../../src/courtroom.cpp" line="2122"/>
+ <location filename="../../src/courtroom.cpp" line="2197"/>
+ <source>HOLD IT!</source>
+ <translation>ZACZEKAJ!</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2039"/>
+ <location filename="../../src/courtroom.cpp" line="2127"/>
+ <location filename="../../src/courtroom.cpp" line="2204"/>
+ <source>OBJECTION!</source>
+ <translation>SPRZECIW!</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2044"/>
+ <location filename="../../src/courtroom.cpp" line="2132"/>
+ <location filename="../../src/courtroom.cpp" line="2213"/>
+ <source>TAKE THAT!</source>
+ <translation>TRZYMAJ TO!</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2056"/>
+ <location filename="../../src/courtroom.cpp" line="2144"/>
+ <location filename="../../src/courtroom.cpp" line="2233"/>
+ <source>CUSTOM OBJECTION!</source>
+ <translation>NIESTANDARDOWY SPRZECIW!</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2060"/>
+ <location filename="../../src/courtroom.cpp" line="2148"/>
+ <location filename="../../src/courtroom.cpp" line="3028"/>
+ <source>shouts</source>
+ <translation>krzyki</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2071"/>
+ <location filename="../../src/courtroom.cpp" line="2158"/>
+ <source>has presented evidence</source>
+ <translation>zaprezentował(a) dowód</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3024"/>
+ <location filename="../../src/courtroom.cpp" line="3685"/>
+ <location filename="../../src/courtroom.cpp" line="3686"/>
+ <source>has stopped the music</source>
+ <translation>zatrzymał(a) muzykę</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3657"/>
+ <location filename="../../src/courtroom.cpp" line="3699"/>
+ <source>[MISSING] %1</source>
+ <translation>[BRAKUJĄCY] %1</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3689"/>
+ <location filename="../../src/courtroom.cpp" line="3690"/>
<source>has played a song</source>
- <translation>włączył piosenkę</translation>
+ <translation>włączył(a) piosenkę</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3224"/>
+ <location filename="../../src/courtroom.cpp" line="3827"/>
<source>You will now pair up with %1 if they also choose your character in return.</source>
<translation>Będziesz teraz w parze z %1, jeśli oni również wybiorą twoją postać.</translation>
</message>
<message>
+ <location filename="../../src/courtroom.cpp" line="3856"/>
+ <source>You have set your offset to %1%%.</source>
+ <translation>Ustawiłeś/aś swoje wyrównanie do %1%%.</translation>
+ </message>
+ <message>
<source>Rainbow</source>
<translation type="obsolete">Tęczowy</translation>
</message>
@@ -871,96 +1045,92 @@ Możesz również zaznaczyć część twojej obecnie pisanej wiadomoÅ›ci i użyÄ
<translation type="obsolete">Turkusowy</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="274"/>
<source>% offset</source>
- <translation>% wyrówanie</translation>
+ <translation type="vanished">% wyrówanie</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="277"/>
+ <location filename="../../src/courtroom.cpp" line="260"/>
<source>To front</source>
<translation>Do przodu</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="278"/>
+ <location filename="../../src/courtroom.cpp" line="261"/>
<source>To behind</source>
<translation>Do tyłu</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="591"/>
+ <location filename="../../src/courtroom.cpp" line="604"/>
<source>Select a character you wish to pair with.</source>
<translation>Zaznacz postać, z którą chcesz się sparować.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="596"/>
<source>Change the percentage offset of your character&apos;s position from the center of the screen.</source>
- <translation>Zmień procentową odległość dla pozycji twojej postaci licząc od środka ekranu.</translation>
+ <translation type="vanished">Zmień procentową odległość dla pozycji twojej postaci licząc od środka ekranu.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="602"/>
+ <location filename="../../src/courtroom.cpp" line="623"/>
<source>Change the order of appearance for your character.</source>
<translation>Zmień kolejność występowania dla twojej postaci.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="607"/>
+ <location filename="../../src/courtroom.cpp" line="628"/>
<source>Display the list of characters to pair with.</source>
<translation>Wyświetl listę postaci do sparowania się z.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="665"/>
+ <location filename="../../src/courtroom.cpp" line="697"/>
<source>Oops, you&apos;re muted!</source>
<translation>Ups, jesteÅ› zmutowany!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="679"/>
+ <location filename="../../src/courtroom.cpp" line="711"/>
<source>Set your character&apos;s emote to play on your next message.</source>
<translation>Ustaw emotkę twojej postaci do odegrania podczas następnej wiadomości.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="683"/>
+ <location filename="../../src/courtroom.cpp" line="715"/>
<source>Set your character&apos;s supplementary background.</source>
<translation>Ustaw uzupełniające tło twojej postaci.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="689"/>
<source>Set an &apos;iniswap&apos;, or an alternative character folder to refer to from your current character.
Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/&lt;charname&gt;/iniswaps.ini</source>
- <translation>Ustaw &apos;iniswap&apos; albo alternatywny folder postaci, aby odnosił się do twojej obecnej postaci.
+ <translation type="vanished">Ustaw &apos;iniswap&apos; albo alternatywny folder postaci, aby odnosił się do twojej obecnej postaci.
Edytuj poprzez pisanie i naciśnięcie enter, [X] aby usunąć. To się zapisuje do base/characters/&lt;charname&gt;/iniswaps.ini</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="698"/>
- <location filename="../../src/courtroom.cpp" line="715"/>
+ <location filename="../../src/courtroom.cpp" line="730"/>
<source>Remove the currently selected iniswap from the list and return to the original character folder.</source>
<translation>Usuń obecne zaznaczony iniswap z listy i powróć do pierwotnego foldera postaci.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="706"/>
+ <location filename="../../src/courtroom.cpp" line="738"/>
<source>Set a sound effect to play on your next &apos;Preanim&apos;. Leaving it on Default will use the emote-defined sound (if any).
Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/&lt;charname&gt;/soundlist.ini</source>
- <translation>Ustaw efekt dźwiękowy do zagrania dla twojej następnej &apos;Animacji&apos; Zostawienie to jako domyślne, użyje dźwięku zdefiniowanego przez emotkę (jeśli istnieje).
-Edytuj poprzez pisanie i naciśnięcie enter, [X] aby usunąć. To się zapisuje do base/characters/&lt;charname&gt;/soundlist.ini</translation>
+ <translation>Ustaw efekt dźwiękowy do zagrania dla twojej następnej &apos;Animacji&apos;. Zostawienie tego jako domyślne, użyje dźwięku zdefiniowanego przez emotkę (jeśli istnieje).
+Edytuj poprzez wciśnięcie Enter po wpisaniu tekstu, [X] aby usunąć. Zapisuje się to w base/characters/&lt;charname&gt;/soundlist.ini</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="722"/>
+ <location filename="../../src/courtroom.cpp" line="754"/>
<source>Choose an effect to play on your next spoken message.
The effects are defined in your theme/effects/effects.ini. Your character can define custom effects by
char.ini [Options] category, effects = &apos;miscname&apos; where it referes to misc/&lt;miscname&gt;/effects.ini to read the effects.</source>
<translation>Wybierz efekt dla twojej następnej wiadomości.
-Efekty są zdefiniowane w twoim pliku theme/effect/effects.ini. Twoja postać może zdefiniować niestandardowe efekty przez
+Efekty są zdefiniowane w pliku theme/effect/effects.ini. Twoja postać może zdefiniować niestandardowe efekty przez
kategorię char.ini [Options], effects = &apos;miscname&apos; gdzie się odnosi do misc/&lt;miscname&gt;/effects.ini, aby przejrzeć efekty.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="742"/>
+ <location filename="../../src/courtroom.cpp" line="774"/>
<source>Music</source>
<translation>Muzyka</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="744"/>
+ <location filename="../../src/courtroom.cpp" line="776"/>
<source>Sfx</source>
<translation>Sfx</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="746"/>
+ <location filename="../../src/courtroom.cpp" line="778"/>
<source>Blips</source>
<translation>Blipy</translation>
</message>
@@ -969,69 +1139,69 @@ kategoriÄ™ char.ini [Options], effects = &apos;miscname&apos; gdzie siÄ™ odnosi
<translation type="obsolete">Limit dziennika</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="791"/>
+ <location filename="../../src/courtroom.cpp" line="823"/>
<source>Change character</source>
<translation>Zmiana postaci</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="797"/>
+ <location filename="../../src/courtroom.cpp" line="829"/>
<source>Reload theme</source>
<translation>Odśwież motyw</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="803"/>
+ <location filename="../../src/courtroom.cpp" line="835"/>
<source>Call mod</source>
<translation>Wezwij moda</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="809"/>
+ <location filename="../../src/courtroom.cpp" line="841"/>
<source>Settings</source>
<translation>Ustawienia</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="822"/>
+ <location filename="../../src/courtroom.cpp" line="854"/>
<source>A/M</source>
<translatorcomment>O meaning &apos;Obszar&apos; and M meaning &apos;Muzyka&apos;.</translatorcomment>
<translation>O/M</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="827"/>
+ <location filename="../../src/courtroom.cpp" line="859"/>
<source>Preanim</source>
<translatorcomment>Whatever, I&apos;ll just call it an animation.</translatorcomment>
<translation>Animacja</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="914"/>
+ <location filename="../../src/courtroom.cpp" line="959"/>
<source>Return back to the server list.</source>
<translation>Wróć z powrotem do listy serwerów.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="927"/>
+ <location filename="../../src/courtroom.cpp" line="972"/>
<source>Become a spectator. You won&apos;t be able to interact with the in-character screen.</source>
- <translation>Zostań spektatorem. Nie będziesz mógł wchodzić w interakcję z oknem IC.</translation>
+ <translation>Funkcja spektatora. Nie będziesz mógł wchodzić w interakcję z oknem IC.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="1457"/>
+ <location filename="../../src/courtroom.cpp" line="1615"/>
<source>You were granted the Disable Modcalls button.</source>
<translation>Zostałeś obdarzonym przyciskiem Wyłącz Wezwania Moda.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="1457"/>
- <location filename="../../src/courtroom.cpp" line="3372"/>
+ <location filename="../../src/courtroom.cpp" line="1615"/>
+ <location filename="../../src/courtroom.cpp" line="4001"/>
<source>CLIENT</source>
<translation>KLIENT</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3011"/>
+ <location filename="../../src/courtroom.cpp" line="3607"/>
<source>You have been banned.</source>
- <translation>Zostałeś zbanowany.</translation>
+ <translation>Zostałeś/aś zbanowany.</translation>
</message>
<message>
<source>You were granted the Guard button.</source>
<translation type="obsolete">Zostałeś obdarzonym przyciskiem Na Służbie.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3211"/>
+ <location filename="../../src/courtroom.cpp" line="3814"/>
<source>You opened the settings menu.</source>
<translation>Otworzyłeś ustawienia.</translation>
</message>
@@ -1044,156 +1214,180 @@ kategoriÄ™ char.ini [Options], effects = &apos;miscname&apos; gdzie siÄ™ odnosi
<translation type="obsolete"> jeżeli oni również wybiorą ciebie spowrotem.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3230"/>
+ <location filename="../../src/courtroom.cpp" line="3835"/>
<source>You are no longer paired with anyone.</source>
<translation>Nie jesteś już w parze z nikim.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3235"/>
+ <location filename="../../src/courtroom.cpp" line="3840"/>
<source>Are you sure you typed that well? The char ID could not be recognised.</source>
<translation>Czy jesteś pewien, że dobrze to napisałeś? ID postaci nie zostało rozpoznane.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3250"/>
<source>You have set your offset to </source>
- <translation>Musisz ustawić swoje wyrównanie do </translation>
+ <translation type="vanished">Musisz ustawić swoje wyrównanie do </translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3257"/>
+ <location filename="../../src/courtroom.cpp" line="3861"/>
<source>Your offset must be between -100% and 100%!</source>
<translation>Twoje wyrównanie musi być między -100%, a 100%!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3262"/>
+ <location filename="../../src/courtroom.cpp" line="3866"/>
<source>That offset does not look like one.</source>
- <translation>To wyrównanie nie wygląda na poprawne.</translation>
+ <translation>To wyrównanie nie jest poprawne.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3268"/>
+ <location filename="../../src/courtroom.cpp" line="3879"/>
+ <source>You have set your vertical offset to %1%%.</source>
+ <translation>Ustawiłeś/aś swoje pionowe wyrównanie do %1%%.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3886"/>
+ <source>Your vertical offset must be between -100% and 100%!</source>
+ <translation>Twoje pionowe wyrównanie musi być pomiędzy -100%, a 100%!</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3891"/>
+ <source>That vertical offset does not look like one.</source>
+ <translation>To pionowe wyrównanie nie jest poprawne.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3897"/>
<source>You switched your music and area list.</source>
<translation>Przełączyłeś swoją listę obszarów i muzyki.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3275"/>
+ <location filename="../../src/courtroom.cpp" line="3904"/>
<source>You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this.</source>
- <translation>Włączyłeś funkcje, które ten serwer może nie wspierać. Możliwe że, nie możesz rozmawiać na czacie IC lub gorzej z tego powodu.</translation>
+ <translation>Włączyłeś funkcje, które ten serwer może nie wspierać. Możliwe, że nie będziesz mógł rozmawiać na czacie IC lub gorzej przez to.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3289"/>
+ <location filename="../../src/courtroom.cpp" line="3918"/>
<source>Your pre-animations interrupt again.</source>
- <translation>Twoje animacje przerywajÄ… tekst spowrotem.</translation>
+ <translation>Twoje animacje będą przerywać tekst znowu.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3292"/>
+ <location filename="../../src/courtroom.cpp" line="3921"/>
<source>Your pre-animations will not interrupt text.</source>
<translation>Twoje animacje nie będą przerywać tekstu.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3303"/>
+ <location filename="../../src/courtroom.cpp" line="3932"/>
<source>Couldn&apos;t open chatlog.txt to write into.</source>
<translation>Nie można było otworzyć chatlog.txt, aby pisać w nim.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3316"/>
+ <location filename="../../src/courtroom.cpp" line="3945"/>
<source>The IC chatlog has been saved.</source>
<translation>Dziennik czatu IC został zapisany.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3329"/>
+ <location filename="../../src/courtroom.cpp" line="3958"/>
<source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely the case file you&apos;re looking for can&apos;t be found in there.</source>
<translation>Nie masz folderu `base/cases/`! Został zrobiony tylko dla ciebie, ale widząc, że ZOSTAŠzrobiony tylko dla ciebie, prawdopodobnie plik rozpraw, którego szukasz nie został znaleziony tutaj.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3356"/>
+ <location filename="../../src/courtroom.cpp" line="3985"/>
<source>Too many arguments to load a case! You only need one filename, without extension.</source>
<translation>Zbyt dużo parametrów, aby załadować rozprawę! Potrzebujesz tylko jedną nazwę pliku, bez rozszerzenia nazwy pliku.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3396"/>
- <location filename="../../src/courtroom.cpp" line="3398"/>
- <location filename="../../src/evidence.cpp" line="762"/>
- <location filename="../../src/evidence.cpp" line="764"/>
+ <location filename="../../src/courtroom.cpp" line="4034"/>
+ <location filename="../../src/courtroom.cpp" line="4036"/>
+ <location filename="../../src/evidence.cpp" line="765"/>
+ <location filename="../../src/evidence.cpp" line="767"/>
<source>UNKNOWN</source>
<translation>NIEZNANE</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3418"/>
+ <location filename="../../src/courtroom.cpp" line="4056"/>
<source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely that you somehow deleted it.</source>
<translation>Nie masz folderu `base/cases/`! Został zrobiony tylko dla ciebie, ale widząc, że ZOSTAŠzrobiony tylko dla ciebie, prawdopodobnie jakoś usunąłeś go.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3433"/>
+ <location filename="../../src/courtroom.cpp" line="4071"/>
<source>You need to give a filename to save (extension not needed) and the courtroom status!</source>
- <translation>Musisz podać nazwę pliku, aby go zapisać (rozszerzenie nie potrzebne) i status sali sądowej!</translation>
+ <translation>Musisz podać nazwę pliku, aby go zapisać (rozszerzenie nie jest potrzebne) i status sali sądowej!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3443"/>
+ <location filename="../../src/courtroom.cpp" line="4081"/>
<source>Too many arguments to save a case! You only need a filename without extension and the courtroom status!</source>
<translation>Zbyt dużo parametrów, aby zapisać rozprawę! Potrzebujesz tylko jedną nazwę pliku, bez rozszerzenia nazwy pliku i statusu sali sądowej!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3470"/>
+ <location filename="../../src/courtroom.cpp" line="4108"/>
<source>Succesfully saved, edit doc and cmdoc link on the ini!</source>
<translation>Zapisano pomyślnie, edytuj dokument i link cmdoc w .ini!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3497"/>
+ <location filename="../../src/courtroom.cpp" line="4135"/>
<source>Master</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3997"/>
+ <location filename="../../src/courtroom.cpp" line="4617"/>
+ <source>Stop Current Song</source>
+ <translation>Zatrzymaj ObecnÄ… PiosenkÄ™</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="4618"/>
+ <source>Play Random Song</source>
+ <translation>Włącz Losową Piosenkę</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="4620"/>
<source>Expand All Categories</source>
<translation>Rozwiń Wszystkie Kategorie</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3999"/>
+ <location filename="../../src/courtroom.cpp" line="4622"/>
<source>Collapse All Categories</source>
<translation>Zwiń Wszystkie Kategorie</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4003"/>
+ <location filename="../../src/courtroom.cpp" line="4626"/>
<source>Fade Out Previous</source>
<translation>Zanikaj poprzednie</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4009"/>
+ <location filename="../../src/courtroom.cpp" line="4632"/>
<source>Fade In</source>
<translation>Rozjaśnij</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4015"/>
+ <location filename="../../src/courtroom.cpp" line="4638"/>
<source>Synchronize</source>
<translation>Zsynchronizuj</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4285"/>
+ <location filename="../../src/courtroom.cpp" line="4970"/>
<source>Default</source>
<translation>Domyślne</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4446"/>
+ <location filename="../../src/courtroom.cpp" line="5153"/>
<source>Reason:</source>
<translation>Powód:</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4447"/>
+ <location filename="../../src/courtroom.cpp" line="5154"/>
<source>Call Moderator</source>
<translation>Wezwij Moderatora</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4455"/>
- <location filename="../../src/courtroom.cpp" line="4459"/>
+ <location filename="../../src/courtroom.cpp" line="5162"/>
+ <location filename="../../src/courtroom.cpp" line="5166"/>
<source>Error</source>
<translation>Błąd</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4455"/>
+ <location filename="../../src/courtroom.cpp" line="5162"/>
<source>You must provide a reason.</source>
<translation>Musisz podać przyczynę.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4459"/>
+ <location filename="../../src/courtroom.cpp" line="5166"/>
<source>The message is too long.</source>
<translation>Ta wiadomość jest zbyt długa.</translation>
</message>
@@ -1204,7 +1398,7 @@ kategoriÄ™ char.ini [Options], effects = &apos;miscname&apos; gdzie siÄ™ odnosi
<message>
<location filename="../../src/evidence.cpp" line="17"/>
<source>Present this piece of evidence to everyone on your next spoken message</source>
- <translation>Zaprezentuj ten dowód dla każdego podczas twojej następnej wiadomości</translation>
+ <translation>Zaprezentujesz ten dowód dla każdego podczas twojej następnej wiadomości</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="24"/>
@@ -1231,7 +1425,7 @@ kategoriÄ™ char.ini [Options], effects = &apos;miscname&apos; gdzie siÄ™ odnosi
<source>Close the evidence display/editing overlay.
You will be prompted if there&apos;s any unsaved changes.</source>
<translation>Zamknij wyświetlanie/edytowanie okienka dowodów.
-Zostaniesz poproszony, jeśli są jakieś niezapisane zmiany.</translation>
+Zostaniesz zawiadomiony, jeśli są jakieś niezapisane zmiany.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="40"/>
@@ -1260,28 +1454,28 @@ Zostaniesz poproszony, jeśli są jakieś niezapisane zmiany.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="158"/>
- <location filename="../../src/evidence.cpp" line="617"/>
+ <location filename="../../src/evidence.cpp" line="619"/>
<source>Transfer evidence to private inventory.</source>
<translation>PrzenieÅ› dowody do prywatnego ekwipunku.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="163"/>
- <location filename="../../src/evidence.cpp" line="627"/>
+ <location filename="../../src/evidence.cpp" line="629"/>
<source>Transfer evidence to global inventory.</source>
<translation>PrzenieÅ› dowody do globalnego ekwipunku.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="263"/>
+ <location filename="../../src/evidence.cpp" line="264"/>
<source>The piece of evidence you&apos;ve been editing has changed.</source>
- <translation>Ten dowód, który edytujesz, zmienił się.</translation>
+ <translation>Dowód, który edytujesz, właśnie się zmienił.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="264"/>
+ <location filename="../../src/evidence.cpp" line="265"/>
<source>Do you wish to keep your changes?</source>
<translation>Czy chcesz zatrzymać zmiany?</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="265"/>
+ <location filename="../../src/evidence.cpp" line="266"/>
<source>Name: %1
Image: %2
Description:
@@ -1292,124 +1486,153 @@ Opis:
%3</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="387"/>
+ <location filename="../../src/evidence.cpp" line="388"/>
<source>Images (*.png)</source>
<translation>Obrazy (*.png)</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="456"/>
- <location filename="../../src/evidence.cpp" line="460"/>
- <location filename="../../src/evidence.cpp" line="463"/>
+ <location filename="../../src/evidence.cpp" line="457"/>
+ <location filename="../../src/evidence.cpp" line="461"/>
+ <location filename="../../src/evidence.cpp" line="464"/>
<source>Double-click to edit...</source>
<translation>Kliknij dwa razy, aby edytować...</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="478"/>
+ <location filename="../../src/evidence.cpp" line="479"/>
<source>Add new evidence...</source>
<translation>Dodaj nowe dowody...</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="556"/>
+ <location filename="../../src/evidence.cpp" line="558"/>
<source>Evidence has been modified.</source>
<translation>Dowody zostały zmodyfikowane.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="557"/>
+ <location filename="../../src/evidence.cpp" line="559"/>
<source>Do you want to save your changes?</source>
<translation>Czy chcesz zapisać zmiany?</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="619"/>
+ <location filename="../../src/evidence.cpp" line="621"/>
<source>Current evidence is global. Click to switch to private.</source>
- <translation>Obecne dowody są globalne. Kliknij, aby przełączyć na prywatne.</translation>
+ <translation>Obecne dowody są globalne. Kliknij, aby przełączyć się na prywatne.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="629"/>
+ <location filename="../../src/evidence.cpp" line="631"/>
<source>Current evidence is private. Click to switch to global.</source>
- <translation>Obecne dowody są prywatne. Kliknij, aby przełączyć na globalne.</translation>
+ <translation>Obecne dowody są prywatne. Kliknij, aby przełączyć się na globalne.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="659"/>
+ <location filename="../../src/evidence.cpp" line="662"/>
<source>&quot;%1&quot; has been transferred.</source>
<translation>&quot;%1&quot; został przeniesiony.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="722"/>
+ <location filename="../../src/evidence.cpp" line="725"/>
<source>Save Inventory</source>
<translation>Zapisz ekwipunek</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="722"/>
- <location filename="../../src/evidence.cpp" line="748"/>
+ <location filename="../../src/evidence.cpp" line="725"/>
+ <location filename="../../src/evidence.cpp" line="751"/>
<source>Ini Files (*.ini)</source>
<translation>Pliki ini (*.ini)</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="748"/>
+ <location filename="../../src/evidence.cpp" line="751"/>
<source>Open Inventory</source>
<translation>Otwórz ekwipunek</translation>
</message>
</context>
<context>
+ <name>DemoServer</name>
+ <message>
+ <location filename="../../src/demoserver.cpp" line="38"/>
+ <location filename="../../src/demoserver.cpp" line="152"/>
+ <source>Load Demo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/demoserver.cpp" line="38"/>
+ <location filename="../../src/demoserver.cpp" line="152"/>
+ <source>Demo Files (*.demo)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Lobby</name>
<message>
- <location filename="../../src/lobby.cpp" line="12"/>
+ <location filename="../../src/lobby.cpp" line="15"/>
<source>Attorney Online 2</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="31"/>
+ <location filename="../../src/lobby.cpp" line="35"/>
<source>Search</source>
<translation>Szukaj</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="39"/>
+ <location filename="../../src/lobby.cpp" line="43"/>
<source>Name</source>
<translation>Nazwa</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="94"/>
+ <location filename="../../src/lobby.cpp" line="98"/>
<source>It doesn&apos;t look like your client is set up correctly.
Did you download all resources correctly from tiny.cc/getao, including the large &apos;base&apos; folder?</source>
<translation>Wygłąda na to, że twój klient nie jest ustawiony poprawnie.
Czy pobrałeś wszystkie zasoby poprawnie z tiny.cc/getao, włączając duży folder &apos;base&apos;?</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="123"/>
+ <location filename="../../src/lobby.cpp" line="127"/>
<source>Version: %1</source>
<translation>Wersja: %1</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="129"/>
+ <location filename="../../src/lobby.cpp" line="133"/>
<source>Settings</source>
<translation>Ustawienia</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="132"/>
+ <location filename="../../src/lobby.cpp" line="136"/>
<source>Allows you to change various aspects of the client.</source>
<translation>Umożliwia zmianę różnych aspektów klienta.</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="176"/>
+ <location filename="../../src/lobby.cpp" line="180"/>
<source>Loading</source>
<translation>Åadowanie</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="180"/>
+ <location filename="../../src/lobby.cpp" line="184"/>
<source>Cancel</source>
<translation>Anuluj</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="365"/>
+ <location filename="../../src/lobby.cpp" line="366"/>
+ <source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Client development:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;QA testing:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!&lt;p&gt;The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.&lt;p&gt;Running on Qt version %2 with the BASS audio engine.&lt;br&gt;APNG plugin loaded: %3&lt;p&gt;Built on %4</source>
+ <translation>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;Symulator dramy sądowej&lt;p&gt;&lt;b&gt;Kod źródłowy:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Główny rozwój:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Rozwój Klienta:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;Testowanie QA:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (inaczej Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Szczególne podziękowania:&lt;/b&gt;&lt;br&gt;CrazyJC (dyrektor wydania 2.8) i MaximumVolty (promocja wydania 2.8); Remy, Hibiki, court-records.net (sprite&apos;y); Qubrick (webAO); Rue (strona internetowa); Draxirch (design UI); Lewdton i Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy oraz FanatSors (AO1); hostom serwerów, mistrzom gier, twórcom rozpraw, twórcom kontentu, i dla całej społeczności AO2!&lt;p&gt;Attorney Online sieciowy projekt wizualnej powieści ma prawa autorskie (c) 2016-2020 Attorney Online developerzy. Dotyczy licencji open-source. Wszystkie inne własności należą do ich odpowiednich właścicieli.&lt;p&gt;Działa na wersji Qt %2 z silnikiem audio BASS.&lt;br&gt;Plugin APNG załadowany: %3&lt;p&gt;Zbudowany na %4</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="398"/>
+ <source>Yes</source>
+ <translation>Tak</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="398"/>
+ <source>No</source>
+ <translation>Nie</translation>
+ </message>
+ <message>
<source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Client development:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;QA testing:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!&lt;p&gt;The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.&lt;p&gt;Running on Qt version %2 with the %3 audio engine.&lt;p&gt;Built on %4</source>
- <translation>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;Symulator dramy sądowej&lt;p&gt;&lt;b&gt;Kod źródłowy:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Główny rozwój:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Rozwój Klienta:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;Testowanie QA:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Szczególne podziękowania:&lt;/b&gt;&lt;br&gt;CrazyJC (dyrektor wydania 2.8) and MaximumVolty (promocja wydania 2.8); Remy, Hibiki, court-records.net (sprite&apos;y); Qubrick (webAO); Rue (strona internetowa); Draxirch (design UI); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); hostom serwerów, mistrzom gier, twórcom rozpraw, twórcom kontentu, i dla całej społeczności AO2!&lt;p&gt;Attorney Online sieciowy projekt wizualnej powieści ma prawa autorskie (c) 2016-2020 Attorney Online developerzy. Dotyczy licencji open-source. Wszystkie inne własności należą do ich odpiowiednich właścicieli.&lt;p&gt;Działa na wersji QT %2 z %3 silnikiem audio.&lt;p&gt;Zbudowany na %4</translation>
+ <translation type="vanished">&lt;h2&gt;Attorney Online %1&lt;/h2&gt;Symulator dramy sądowej&lt;p&gt;&lt;b&gt;Kod źródłowy:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Główny rozwój:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Rozwój Klienta:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;Testowanie QA:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Szczególne podziękowania:&lt;/b&gt;&lt;br&gt;CrazyJC (dyrektor wydania 2.8) and MaximumVolty (promocja wydania 2.8); Remy, Hibiki, court-records.net (sprite&apos;y); Qubrick (webAO); Rue (strona internetowa); Draxirch (design UI); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); hostom serwerów, mistrzom gier, twórcom rozpraw, twórcom kontentu, i dla całej społeczności AO2!&lt;p&gt;Attorney Online sieciowy projekt wizualnej powieści ma prawa autorskie (c) 2016-2020 Attorney Online developerzy. Dotyczy licencji open-source. Wszystkie inne własności należą do ich odpiowiednich właścicieli.&lt;p&gt;Działa na wersji QT %2 z %3 silnikiem audio.&lt;p&gt;Zbudowany na %4</translation>
</message>
<message>
<source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;2.8 Major Release development:&lt;/b&gt;&lt;br&gt;Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;2.8 Quality Assurance:&lt;/b&gt;&lt;br&gt;WillDean, Captain N, Mr M, Riel, Seimmet, Fury McFlurry,CedricDewitt, Chewable Tablets, Fantos, Futugaze,Geck, Minx, Pandae, Sierra, CrazyJC, CaseyMayCazy,GreenBowers, Robotic Overlord, Veritas, Gin-Gi&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy, the AO2 community, server hosts, game masters,case makers, content creators and players!</source>
<translation type="obsolete">&lt;h2&gt;Attorney Online %1&lt;/h2&gt;Symulator dramy sądowej&lt;p&gt;&lt;b&gt;Kod źródłowy:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Główny rozwój:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;Główny rozwój nad wydaniem 2.8:&lt;/b&gt;&lt;br&gt;Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Zapewnienie jakości 2.8:&lt;/b&gt;&lt;br&gt;WillDean, Captain N, Mr M, Riel, Seimmet, Fury McFlurry,CedricDewitt, Chewable Tablets, Fantos, Futugaze,Geck, Minx, Pandae, Sierra, CrazyJC, CaseyMayCazy,GreenBowers, Robotic Overlord, Veritas, Gin-Gi&lt;p&gt;&lt;b&gt;Szczególne podziękowania:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy, społeczności AO2, hostów serwerów, mistrzów gier, twórców rozpraw, twórców kontentu i dla graczy!</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="398"/>
+ <location filename="../../src/lobby.cpp" line="400"/>
<source>About</source>
<translation>Opis</translation>
</message>
@@ -1418,13 +1641,13 @@ Czy pobrałeś wszystkie zasoby poprawnie z tiny.cc/getao, włączając duży fo
<translation type="obsolete">&lt;h2&gt;Attorney Online: %1&lt;/h2&gt;Symulator dramy sądowej&lt;p&gt;&lt;b&gt;Kod żródłowy:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Główny rozwój:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;Szczególne podziękowania:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="540"/>
+ <location filename="../../src/lobby.cpp" line="551"/>
<source>Online: %1/%2</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="142"/>
- <location filename="../../src/lobby.cpp" line="436"/>
+ <location filename="../../src/lobby.cpp" line="146"/>
+ <location filename="../../src/lobby.cpp" line="438"/>
<source>Offline</source>
<translation></translation>
</message>
@@ -1439,25 +1662,24 @@ Czy pobrałeś wszystkie zasoby poprawnie z tiny.cc/getao, włączając duży fo
<translation>NIEZNANE</translation>
</message>
<message>
- <location filename="../../src/chatlogpiece.cpp" line="55"/>
<source> has played a song: </source>
- <translation> włączył piosenkę: </translation>
+ <translation type="vanished"> włączył piosenkę: </translation>
</message>
</context>
<context>
<name>debug_functions</name>
<message>
- <location filename="../../src/debug_functions.cpp" line="10"/>
+ <location filename="../../src/debug_functions.cpp" line="13"/>
<source>Error: %1</source>
<translation>Błąd: %1</translation>
</message>
<message>
- <location filename="../../src/debug_functions.cpp" line="13"/>
+ <location filename="../../src/debug_functions.cpp" line="16"/>
<source>Error</source>
<translation>Błąd</translation>
</message>
<message>
- <location filename="../../src/debug_functions.cpp" line="25"/>
+ <location filename="../../src/debug_functions.cpp" line="29"/>
<source>Notice</source>
<translation>Ogłoszenie</translation>
</message>
diff --git a/resource/translations/ao_pt.qm b/resource/translations/ao_pt.qm
index 1ff02390..a02e5669 100644
--- a/resource/translations/ao_pt.qm
+++ b/resource/translations/ao_pt.qm
Binary files differ
diff --git a/resource/translations/ao_pt.ts b/resource/translations/ao_pt.ts
index e867729c..4c6dceb3 100644
--- a/resource/translations/ao_pt.ts
+++ b/resource/translations/ao_pt.ts
@@ -1,27 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.0" language="pt_BR">
+<TS version="2.1" language="pt_BR">
<context>
<name>AOApplication</name>
<message>
- <location filename="../../src/aoapplication.cpp" line="129"/>
+ <location filename="../../src/aoapplication.cpp" line="133"/>
<source>Disconnected from server.</source>
<translation>Desconectado do servidor.</translation>
</message>
<message>
- <location filename="../../src/aoapplication.cpp" line="152"/>
+ <location filename="../../src/aoapplication.cpp" line="156"/>
<source>Error connecting to master server. Will try again in %1 seconds.</source>
<translation>Erro ao conectar ao servidor principal. Testando novamente em %1 segundos.</translation>
</message>
<message>
- <location filename="../../src/aoapplication.cpp" line="157"/>
+ <location filename="../../src/aoapplication.cpp" line="161"/>
<source>There was an error connecting to the master server.
We deploy multiple master servers to mitigate any possible downtime, but the client appears to have exhausted all possible methods of finding and connecting to one.
Please check your Internet connection and firewall, and please try again.</source>
<translation>Ocorreu um erro ao obter a lista de servidores. Verifique sua conexão à Internet e firewall e tente novamente.</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="94"/>
+ <location filename="../../src/packet_distribution.cpp" line="93"/>
<source>Outdated version! Your version: %1
Please go to aceattorneyonline.com to update.</source>
<translation>Versão desatualizada! Sua versão: %1
@@ -34,54 +34,51 @@ Have a nice day.</source>
Tenha um bom dia.</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="253"/>
+ <location filename="../../src/packet_distribution.cpp" line="263"/>
<source>Attorney Online 2</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="281"/>
+ <location filename="../../src/packet_distribution.cpp" line="289"/>
<source>Loading</source>
<translation>Carregando</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="337"/>
- <location filename="../../src/packet_distribution.cpp" line="486"/>
+ <location filename="../../src/packet_distribution.cpp" line="346"/>
<source>Loading chars:
%1/%2</source>
<translation>Carregando personagens:
%1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="384"/>
<source>Loading evidence:
%1/%2</source>
- <translation>Carregando evidências:
+ <translation type="vanished">Carregando evidências:
%1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="419"/>
- <location filename="../../src/packet_distribution.cpp" line="513"/>
+ <location filename="../../src/packet_distribution.cpp" line="374"/>
<source>Loading music:
%1/%2</source>
<translation>Carregando músicas:
%1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="696"/>
+ <location filename="../../src/packet_distribution.cpp" line="578"/>
<source>You have been kicked from the server.
Reason: %1</source>
<translation>Você foi expulso do servidor.
Motivo: %1</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="704"/>
+ <location filename="../../src/packet_distribution.cpp" line="586"/>
<source>You have been banned from the server.
Reason: %1</source>
<translation>Você foi banido do servidor.
Motivo: %1</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="712"/>
+ <location filename="../../src/packet_distribution.cpp" line="594"/>
<source>You are banned on this server.
Reason: %1</source>
<translation>Você foi banido neste servidor.
@@ -204,43 +201,83 @@ Motivo: %1</translation>
<translation>Se marcado, o registro conterá um carimbo de tempo em UTC antes do nome.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="176"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="168"/>
+ <source>Log IC actions:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="170"/>
+ <source>If ticked, log will show IC actions such as shouting and presenting evidence.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="182"/>
+ <source>Text Stay Time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="183"/>
+ <source>Minimum amount of time (in miliseconds) an IC message must stay on screen before the next IC message is shown, acting as a &apos;queue&apos;. Set to 0 to disable this behavior.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="197"/>
+ <source>Desynchronize IC Logs:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="199"/>
+ <source>If ticked, log will show messages as-received, while viewport will parse according to the queue (Text Stay Time).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="210"/>
+ <source>Instant Objection:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="212"/>
+ <source>If Text Stay Time is more than 0, instant objection will skip queued messages instead of waiting to catch up.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="231"/>
<source>Default username:</source>
<translation>Nome de usuário padrão:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="178"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="233"/>
<source>Your OOC name will be automatically set to this value when you join a server.</source>
<translation>Seu nome OOC será automaticamente definido com esse valor quando você ingressar em um servidor.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="191"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="246"/>
<source>Custom shownames:</source>
<translation>Nomes personalizados:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="193"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="248"/>
<source>Gives the default value for the in-game &apos;Custom shownames&apos; tickbox, which in turn determines whether the client should display custom in-character names.</source>
<translatorcomment>&apos;Custom shownames&apos; changed to &apos;Shownames&apos; because that&apos;s the actual name</translatorcomment>
<translation>Fornece o valor padrão para a caixa de seleção &apos;Shownames&apos; no jogo, que determina se o cliente deve exibir nomes personalizados nos personagens.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="213"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="268"/>
<source>Backup MS:</source>
<translation>MS de backup:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="215"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="270"/>
<source>If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address.</source>
<translation>Se as pesquisas internas do servidor falharem, o jogo tentará o endereço fornecido aqui e o usará como um endereço de servidor principal de backup.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="228"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="283"/>
<source>Discord:</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="230"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="285"/>
<source>Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for.</source>
<translation>Permite que outras pessoas no Discord vejam em que servidor você está, qual personagem está jogando e há quanto tempo está jogando.</translation>
</message>
@@ -253,12 +290,12 @@ Motivo: %1</translation>
<translation type="obsolete">Permite agitar e piscar. Desative isso se você tiver preocupações ou problemas com fotosensibilidade e/ou convulsões.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="243"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="298"/>
<source>Language:</source>
<translation>Língua:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="245"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="300"/>
<source>Sets the language if you don&apos;t want to use your system language.</source>
<translation>Define o idioma se você não quiser usar o idioma do sistema.</translation>
</message>
@@ -267,47 +304,47 @@ Motivo: %1</translation>
<translation type="obsolete">Habilite para adicionar uma pequena pausa nos sinais de pontuação.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="383"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="438"/>
<source>Callwords</source>
<translation>Palavras-chave</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="410"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="465"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!&lt;br&gt;Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Digite quantas palavras-chave você desejar. Estes não diferenciam maiúsculas de minúsculas. Certifique-se de deixar cada palavra chave em sua própria linha!&lt;br&gt;Não deixe uma linha com um espaço no final - você será alertado toda vez que alguém usar um espaço em suas mensagens.&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="420"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="475"/>
<source>Audio</source>
<translation>Ãudio</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="434"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="489"/>
<source>Audio device:</source>
<translation>Dispositivo de áudio:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="435"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="490"/>
<source>Sets the audio device for all sounds.</source>
<translation>Define o dispositivo de áudio para todos os sons.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="468"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="523"/>
<source>Music:</source>
<translation>Música:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="469"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="524"/>
<source>Sets the music&apos;s default volume.</source>
<translation>Define o volume padrão da música.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="483"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="538"/>
<source>SFX:</source>
<translation>SFX:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="485"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="540"/>
<source>Sets the SFX&apos;s default volume. Interjections and actual sound effects count as &apos;SFX&apos;.</source>
<translation>Define o volume padrão do SFX. Interjeições e efeitos sonoros reais contam como &apos;SFX&apos;.</translation>
</message>
@@ -336,47 +373,47 @@ Motivo: %1</translation>
<translation type="obsolete">Define o volume padrão para sons SFX, como interjeições ou outros efeitos sonoros de personagens.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="499"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="554"/>
<source>Blips:</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="501"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="556"/>
<source>Sets the volume of the blips, the talking sound effects.</source>
<translation>Define o volume dos blips, os efeitos sonoros de fala.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="523"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="578"/>
<source>Blip rate:</source>
<translation>Taxa de blip:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="525"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="580"/>
<source>Sets the delay between playing the blip sounds.</source>
<translation>Define o atraso entre a reprodução dos sons de blip.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="540"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="595"/>
<source>Blank blips:</source>
<translation>Blips em branco:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="542"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="597"/>
<source>If true, the game will play a blip sound even when a space is &apos;being said&apos;.</source>
<translation>Se ativado, o jogo emitirá um sinal sonoro, mesmo quando um espaço estiver sendo &quot;dito&quot;.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="554"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="609"/>
<source>Enable Looping SFX:</source>
<translation>Ative o SFX em loop:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="555"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="610"/>
<source>If true, the game will allow looping sound effects to play on preanimations.</source>
<translation>Se ativado, o jogo permitirá que efeitos sonoros em loop sejam reproduzidos em pré-animações.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="567"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="622"/>
<source>Kill Music On Objection:</source>
<translation>Parar a música no protesto:</translation>
</message>
@@ -385,197 +422,197 @@ Motivo: %1</translation>
<translation type="obsolete">Se ativado, o jogo interrompe a música quando alguém protestar , como nos jogos reais.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="251"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="306"/>
<source> - Keep current setting</source>
<translation> - Mantenha as configurações atuais</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="265"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="320"/>
<source>Allow Screenshake:</source>
<translation>Permitir screenshake:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="267"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="322"/>
<source>Allows screenshaking. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source>
<translation>Permite o tremor de tela (AVISO: Pode causar convulsões devido à imagens tremidas).</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="279"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="334"/>
<source>Allow Effects:</source>
<translation>Permitir efeitos:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="281"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="336"/>
<source>Allows screen effects. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source>
<translation>Permite efeitos de tela (AVISO: Pode causar convulsões devido à imagens tremidas)..</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="293"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="348"/>
<source>Network Frame Effects:</source>
<translation>Envie efeitos para o servidor:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="294"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="349"/>
<source>Send screen-shaking, flashes and sounds as defined in the char.ini over the network. Only works for servers that support this functionality.</source>
<translation>Envie vibrações, flashes e sons na tela, conforme definido no char.ini pela rede. Funciona apenas para servidores que suportam essa funcionalidade.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="307"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="362"/>
<source>Colors in IC Log:</source>
<translation>Cores no Log IC:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="309"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="364"/>
<source>Use the markup colors in the server IC chatlog.</source>
<translation>Permitir cores no chat do IC no servidor.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="320"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="375"/>
<source>Sticky Sounds:</source>
<translation>Manter sons:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="322"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="377"/>
<source>Turn this on to prevent the sound dropdown from clearing the sound after playing it.</source>
<translation>Marque para evitar que o som do menu suspenso apague o som após a reprodução.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="334"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="389"/>
<source>Sticky Effects:</source>
<translation>Manter efeitos:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="336"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="391"/>
<source>Turn this on to prevent the effects dropdown from clearing the effect after playing it.</source>
<translation>Ative-o para impedir que o menu suspenso de efeito exclua o efeito após reproduzi-lo.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="349"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="404"/>
<source>Sticky Preanims:</source>
<translation>Manter preanims:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="351"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="406"/>
<source>Turn this on to prevent preanimation checkbox from clearing after playing the emote.</source>
<translation>Ative-o para impedir que a caixa de seleção de pré-animação seja desmarcada após a execução do emote.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="363"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="418"/>
<source>Custom Chatboxes:</source>
<translation>Caixas de bate-papo personalizadas:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="365"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="420"/>
<source>Turn this on to allow characters to define their own custom chat box designs.</source>
<translation>Ative isso para permitir que os personagens tenham as suas próprias caixas de bate-papo personalizadas.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="533"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="588"/>
<source>Play a blip sound &quot;once per every X symbols&quot;, where X is the blip rate.</source>
<translation>Reproduz um som de blip &quot;uma vez para cada símbolo X&quot;, em que X é a taxa de blip.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="569"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="624"/>
<source>If true, AO2 will stop the music for you when you or someone else does &apos;Objection!&apos;.</source>
<translation>Se ativado, o AO2 interromperá a música quando você ou outra pessoa fizer uma &apos;Protesto!&apos;.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="581"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="636"/>
<source>Casing</source>
<translation>Caso</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="598"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="653"/>
<source>This server supports case alerts.</source>
<translation>Este servidor suporta anúncios de casos.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="601"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="656"/>
<source>This server does not support case alerts.</source>
<translation>Este servidor não suporta alertas de caso.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="602"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="657"/>
<source>Pretty self-explanatory.</source>
<translation>Bastante auto-explicativo.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="611"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="666"/>
<source>Casing:</source>
<translation>Caso:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="613"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="668"/>
<source>If checked, you will get alerts about case announcements.</source>
<translation>Se marcado, você será alertado quando houverem anúncios de casos.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="629"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="684"/>
<source>Defense:</source>
<translation>Defesa:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="630"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="685"/>
<source>If checked, you will get alerts about case announcements if a defense spot is open.</source>
<translation>Se marcado, você receberá alertas sobre os anúncios de casos, se um ponto de defesa estiver aberto.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="644"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="699"/>
<source>Prosecution:</source>
<translation>Promotor:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="646"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="701"/>
<source>If checked, you will get alerts about case announcements if a prosecutor spot is open.</source>
<translation>Se marcado, você receberá alertas sobre os anúncios de casos, se uma posição de promotor estiver disponível.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="660"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="715"/>
<source>Judge:</source>
<translation>Juíz:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="661"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="716"/>
<source>If checked, you will get alerts about case announcements if the judge spot is open.</source>
<translation>Se marcado, você receberá alertas sobre os anúncios de casos, se o local do juíz: estiver aberto.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="675"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="730"/>
<source>Juror:</source>
<translation>Jurado:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="676"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="731"/>
<source>If checked, you will get alerts about case announcements if a juror spot is open.</source>
<translation>Se marcado, você receberá alertas sobre os anúncios de casos, se um local do jurado estiver aberto.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="690"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="745"/>
<source>Stenographer:</source>
<translation>Estenógrafo:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="692"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="747"/>
<source>If checked, you will get alerts about case announcements if a stenographer spot is open.</source>
<translation>Se marcado, você receberá alertas sobre anúncios de casos, se um local de estenógrafo estiver aberto.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="706"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="761"/>
<source>CM:</source>
<translation>CM:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="708"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="763"/>
<source>If checked, you will appear amongst the potential CMs on the server.</source>
<translation>Se marcado, você aparecerá entre os CMs possíveis no servidor.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="738"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="793"/>
<source>Automatic Logging:</source>
<translation>Registro automático:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="740"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="795"/>
<source>If checked, all logs will be automatically written in the /logs folder.</source>
<translation>Se marcado, todos os registros serão automaticamente salvos na pasta logs.</translation>
</message>
@@ -588,12 +625,12 @@ Motivo: %1</translation>
<translation type="obsolete">Se marcado, você aparecerá entre as testemunhas em potencial no servidor.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="722"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="777"/>
<source>Hosting cases:</source>
<translation>Casos:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="724"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="779"/>
<source>If you&apos;re a CM, enter what cases you are willing to host.</source>
<translation>Se você é um CM, insira os casos que deseja hospedar.</translation>
</message>
@@ -625,34 +662,34 @@ Motivo: %1</translation>
<context>
<name>Courtroom</name>
<message>
- <location filename="../../src/charselect.cpp" line="21"/>
+ <location filename="../../src/charselect.cpp" line="23"/>
<source>Password</source>
<translation>Senha</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="27"/>
+ <location filename="../../src/charselect.cpp" line="29"/>
<source>Spectator</source>
<translation>Espectador</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="30"/>
- <location filename="../../src/courtroom.cpp" line="144"/>
+ <location filename="../../src/charselect.cpp" line="32"/>
+ <location filename="../../src/courtroom.cpp" line="153"/>
<source>Search</source>
<translation>Pesquisar</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="35"/>
+ <location filename="../../src/charselect.cpp" line="37"/>
<source>Passworded</source>
<translatorcomment>A translation wouldn&apos;t fit because of the shitty theme system.</translatorcomment>
<translation></translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="39"/>
+ <location filename="../../src/charselect.cpp" line="41"/>
<source>Taken</source>
<translation>Em uso</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="236"/>
+ <location filename="../../src/charselect.cpp" line="239"/>
<source>Generating chars:
%1/%2</source>
<translation>Gerando personagens:
@@ -663,13 +700,13 @@ Motivo: %1</translation>
<translation type="obsolete">Não foi possível encontrar %1</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="117"/>
+ <location filename="../../src/courtroom.cpp" line="126"/>
<source>Showname</source>
<translatorcomment>A translation wouldn&apos;t fit because of the shitty theme system.</translatorcomment>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="121"/>
+ <location filename="../../src/courtroom.cpp" line="130"/>
<source>Message</source>
<translation>Mensagem</translation>
</message>
@@ -678,37 +715,37 @@ Motivo: %1</translation>
<translation type="obsolete">Mensagem OOC</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="136"/>
+ <location filename="../../src/courtroom.cpp" line="145"/>
<source>Name</source>
<translation>Nome</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="186"/>
+ <location filename="../../src/courtroom.cpp" line="195"/>
<source>Pre</source>
<translatorcomment>A translation wouldn&apos;t fit because of the shitty theme system.</translatorcomment>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="189"/>
+ <location filename="../../src/courtroom.cpp" line="198"/>
<source>Flip</source>
<translatorcomment>A translation wouldn&apos;t fit because of the shitty theme system.</translatorcomment>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="202"/>
- <location filename="../../src/courtroom.cpp" line="804"/>
+ <location filename="../../src/courtroom.cpp" line="211"/>
+ <location filename="../../src/courtroom.cpp" line="847"/>
<source>Casing</source>
<translatorcomment>A translation wouldn&apos;t fit because of the shitty theme system.</translatorcomment>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="207"/>
+ <location filename="../../src/courtroom.cpp" line="216"/>
<source>Shownames</source>
<translatorcomment>A translation wouldn&apos;t fit because of the shitty theme system.</translatorcomment>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="210"/>
+ <location filename="../../src/courtroom.cpp" line="219"/>
<source>Immediate</source>
<translatorcomment>A translation wouldn&apos;t fit because of the shitty theme system.</translatorcomment>
<translation></translation>
@@ -750,74 +787,73 @@ Motivo: %1</translation>
<translation type="obsolete">Ciano</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="245"/>
<source>% offset</source>
- <translation>% deslocamento</translation>
+ <translation type="vanished">% deslocamento</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="731"/>
+ <location filename="../../src/courtroom.cpp" line="774"/>
<source>Music</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="733"/>
+ <location filename="../../src/courtroom.cpp" line="776"/>
<source>Sfx</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="735"/>
+ <location filename="../../src/courtroom.cpp" line="778"/>
<source>Blips</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="756"/>
- <location filename="../../src/courtroom.cpp" line="3584"/>
+ <location filename="../../src/courtroom.cpp" line="799"/>
+ <location filename="../../src/courtroom.cpp" line="4142"/>
<source>Server</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="780"/>
+ <location filename="../../src/courtroom.cpp" line="823"/>
<source>Change character</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="786"/>
+ <location filename="../../src/courtroom.cpp" line="829"/>
<source>Reload theme</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="792"/>
+ <location filename="../../src/courtroom.cpp" line="835"/>
<source>Call mod</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="798"/>
+ <location filename="../../src/courtroom.cpp" line="841"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="811"/>
+ <location filename="../../src/courtroom.cpp" line="854"/>
<source>A/M</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="816"/>
+ <location filename="../../src/courtroom.cpp" line="859"/>
<source>Preanim</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="902"/>
+ <location filename="../../src/courtroom.cpp" line="958"/>
<source>Back to Lobby</source>
<translatorcomment>A translation wouldn&apos;t fit because of the shitty theme system.</translatorcomment>
<translation>Lobby</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="1514"/>
+ <location filename="../../src/courtroom.cpp" line="1615"/>
<source>You were granted the Disable Modcalls button.</source>
<translation>Você recebeu o botão Desativar Modcalls.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3094"/>
+ <location filename="../../src/courtroom.cpp" line="3607"/>
<source>You have been banned.</source>
<translation>Você foi banido.</translation>
</message>
@@ -826,7 +862,7 @@ Motivo: %1</translation>
<translation type="obsolete">Isso não faz nada, mas lá vai você.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3289"/>
+ <location filename="../../src/courtroom.cpp" line="3814"/>
<source>You opened the settings menu.</source>
<translation>Você abriu o menu de configurações.</translation>
</message>
@@ -839,87 +875,118 @@ Motivo: %1</translation>
<translation type="obsolete"> se eles também escolherem seu personagem em troca.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="112"/>
+ <location filename="../../src/courtroom.cpp" line="121"/>
+ <location filename="../../src/courtroom.cpp" line="3652"/>
+ <location filename="../../src/courtroom.cpp" line="3694"/>
+ <location filename="../../src/courtroom.cpp" line="4415"/>
<source>None</source>
<translation>Nada</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="193"/>
+ <location filename="../../src/courtroom.cpp" line="202"/>
<source>Guard</source>
<translation>Guarda</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="197"/>
+ <location filename="../../src/courtroom.cpp" line="206"/>
<source>Additive</source>
<translation>Aditivo</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="248"/>
+ <location filename="../../src/courtroom.cpp" line="254"/>
+ <source>% x offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="257"/>
+ <source>% y offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="260"/>
<source>To front</source>
<translation>Para frente</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="249"/>
+ <location filename="../../src/courtroom.cpp" line="261"/>
<source>To behind</source>
<translation>Ao fundo</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="579"/>
+ <location filename="../../src/courtroom.cpp" line="604"/>
<source>Select a character you wish to pair with.</source>
<translation>Selecione um personagem com o qual deseja parear.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="584"/>
<source>Change the percentage offset of your character&apos;s position from the center of the screen.</source>
- <translation>Altere o deslocamento percentual da posição do seu personagem no centro da tela.</translation>
+ <translation type="vanished">Altere o deslocamento percentual da posição do seu personagem no centro da tela.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="590"/>
+ <location filename="../../src/courtroom.cpp" line="623"/>
<source>Change the order of appearance for your character.</source>
<translation>Mude a ordem de aparência do seu personagem.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="595"/>
+ <location filename="../../src/courtroom.cpp" line="628"/>
<source>Display the list of characters to pair with.</source>
<translation>Exibe a lista de caracteres para corresponder.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="654"/>
+ <location filename="../../src/courtroom.cpp" line="697"/>
<source>Oops, you&apos;re muted!</source>
<translation>Opa, você está mudo!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="668"/>
+ <location filename="../../src/courtroom.cpp" line="711"/>
<source>Set your character&apos;s emote to play on your next message.</source>
<translation>Defina o emote do seu personagem para usar na próxima mensagem.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="672"/>
+ <location filename="../../src/courtroom.cpp" line="715"/>
<source>Set your character&apos;s supplementary background.</source>
<translation>Defina o plano de fundo suplementar para o seu personagem.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="678"/>
<source>Set an &apos;iniswap&apos;, or an alternative character folder to refer to from your current character.
Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/&lt;charname&gt;/iniswaps.ini</source>
- <translation>Defina um &apos;iniswap&apos; ou uma pasta de caracteres alternativa para consultar seu personagem atual.
+ <translation type="vanished">Defina um &apos;iniswap&apos; ou uma pasta de caracteres alternativa para consultar seu personagem atual.
Edite digitando e pressionando Enter, [X] para excluir. Isso é salvo em base/characters/&lt;charname&gt;/iniswaps.ini</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="687"/>
- <location filename="../../src/courtroom.cpp" line="704"/>
+ <location filename="../../src/courtroom.cpp" line="609"/>
+ <source>Change the horizontal percentage offset of your character&apos;s position from the center of the screen.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="616"/>
+ <source>Change the vertical percentage offset of your character&apos;s position from the center of the screen.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="721"/>
+ <source>Set an &apos;iniswap&apos;, or an alternative character folder to refer to from your current character.
+Edit by typing and pressing Enter, [X] to remove. This saves to your base/iniswaps.ini</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="730"/>
<source>Remove the currently selected iniswap from the list and return to the original character folder.</source>
<translation>Remova o iniswap atualmente selecionado da lista e retorne à pasta de caracteres original.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="695"/>
+ <location filename="../../src/courtroom.cpp" line="738"/>
<source>Set a sound effect to play on your next &apos;Preanim&apos;. Leaving it on Default will use the emote-defined sound (if any).
Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/&lt;charname&gt;/soundlist.ini</source>
<translation>Configure um efeito sonoro para tocar no seu próximo &apos;Preanim&apos;. Deixá-lo no padrão usará o som definido pelos emoticons (caso existam).
Edite digitando e pressionando Enter, [X] para excluir. Isso é salvo em base/characters/&lt;charname&gt;/soundlist.ini</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="711"/>
+ <location filename="../../src/courtroom.cpp" line="746"/>
+ <source>Remove the currently selected sound effect.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="754"/>
<source>Choose an effect to play on your next spoken message.
The effects are defined in your theme/effects/effects.ini. Your character can define custom effects by
char.ini [Options] category, effects = &apos;miscname&apos; where it referes to misc/&lt;miscname&gt;/effects.ini to read the effects.</source>
@@ -928,293 +995,360 @@ Os efeitos são definidos em theme / effects / effects.ini. Seu personagem pode
categoria char.ini [Opções], effects = &apos;miscname&apos;, onde se refere a misc/&lt;miscname&gt;/effects.ini to read the effects.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="738"/>
+ <location filename="../../src/courtroom.cpp" line="781"/>
<source>Hold It!</source>
<translation>Um momento!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="739"/>
- <location filename="../../src/courtroom.cpp" line="745"/>
- <location filename="../../src/courtroom.cpp" line="751"/>
+ <location filename="../../src/courtroom.cpp" line="782"/>
+ <location filename="../../src/courtroom.cpp" line="788"/>
+ <location filename="../../src/courtroom.cpp" line="794"/>
<source>When this is turned on, your next in-character message will be a shout!</source>
<translation>Quando isso estiver ativado, sua próxima mensagem do personagem será um grito.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="744"/>
+ <location filename="../../src/courtroom.cpp" line="787"/>
<source>Objection!</source>
<translation>Protesto!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="750"/>
+ <location filename="../../src/courtroom.cpp" line="793"/>
<source>Take That!</source>
<translation>Tome isso!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="758"/>
+ <location filename="../../src/courtroom.cpp" line="801"/>
<source>Toggle between server chat and global AO2 chat.</source>
<translation>Alterne entre o bate-papo do servidor e o global.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="762"/>
- <location filename="../../src/courtroom.cpp" line="766"/>
- <location filename="../../src/courtroom.cpp" line="772"/>
- <location filename="../../src/courtroom.cpp" line="776"/>
+ <location filename="../../src/courtroom.cpp" line="805"/>
+ <location filename="../../src/courtroom.cpp" line="809"/>
+ <location filename="../../src/courtroom.cpp" line="815"/>
+ <location filename="../../src/courtroom.cpp" line="819"/>
<source>This will display the animation in the viewport as soon as it is pressed.</source>
<translation>Isso exibirá a animação na janela de visualização assim que for pressionada.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="770"/>
+ <location filename="../../src/courtroom.cpp" line="813"/>
<source>Guilty!</source>
<translation>Culpado!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="783"/>
+ <location filename="../../src/courtroom.cpp" line="826"/>
<source>Bring up the Character Select Screen and change your character.</source>
<translation>Abra a tela de seleção de personagem e mude seu personagem.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="789"/>
+ <location filename="../../src/courtroom.cpp" line="832"/>
<source>Refresh the theme and update all of the ui elements to match.</source>
<translation>Atualize o tema e todos os elementos da interface do usuário para corresponder.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="795"/>
+ <location filename="../../src/courtroom.cpp" line="838"/>
<source>Request the attention of the current server&apos;s moderator.</source>
<translation>Solicite a atenção do moderador do servidor atual.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="801"/>
+ <location filename="../../src/courtroom.cpp" line="844"/>
<source>Allows you to change various aspects of the client.</source>
<translation>Permite alterar vários aspectos do cliente.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="807"/>
+ <location filename="../../src/courtroom.cpp" line="850"/>
<source>An interface to help you announce a case (you have to be a CM first to be able to announce cases)</source>
<translation>Uma interface para ajudá-lo a anunciar um caso (deve ser um CM para poder anunciar casos)</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="813"/>
+ <location filename="../../src/courtroom.cpp" line="856"/>
<source>Switch between Areas and Music lists</source>
<translation>Alterne entre áreas e listas de músicas</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="818"/>
+ <location filename="../../src/courtroom.cpp" line="861"/>
<source>Play a single-shot animation as defined by the emote when checked.</source>
<translation>Reproduza uma animação de tiro único, conforme definido pelo emote, quando marcada.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="822"/>
+ <location filename="../../src/courtroom.cpp" line="864"/>
<source>If preanim is checked, display the input text immediately as the animation plays concurrently.</source>
<translation>Se pré-impressão estiver marcada, exiba o texto de entrada imediatamente enquanto a animação estiver sendo reproduzida simultaneamente.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="826"/>
+ <location filename="../../src/courtroom.cpp" line="882"/>
<source>Mirror your character&apos;s emotes when checked.</source>
<translation>Reflita os gestos do seu personagem quando marcado.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="830"/>
+ <location filename="../../src/courtroom.cpp" line="886"/>
<source>Add text to your last spoken message when checked.</source>
<translation>Adicione texto à sua última mensagem falada quando marcado.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="834"/>
+ <location filename="../../src/courtroom.cpp" line="890"/>
<source>Do not listen to mod calls when checked, preventing them from playing sounds or focusing attention on the window.</source>
<translation>Você não ouve chamadas de moderação quando marcado, impedindo-os de tocar sons ou concentrando a atenção na janela.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="838"/>
+ <location filename="../../src/courtroom.cpp" line="894"/>
<source>Lets you receive case alerts when enabled.
(You can set your preferences in the Settings!)</source>
<translation>Permite que você receba alertas de caso quando ativado.
(Você pode configurar suas preferências em Configurações!)</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="843"/>
+ <location filename="../../src/courtroom.cpp" line="899"/>
<source>Display customized shownames for all users when checked.</source>
<translation>Mostrar nomes personalizados para todos os usuários quando marcado.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="846"/>
+ <location filename="../../src/courtroom.cpp" line="902"/>
<source>Custom Shout!</source>
<translation>Grito personalizado!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="849"/>
+ <location filename="../../src/courtroom.cpp" line="905"/>
<source>This will display the custom character-defined animation in the viewport as soon as it is pressed.
To make one, your character&apos;s folder must contain custom.[webp/apng/gif/png] and custom.[wav/ogg/opus] sound effect</source>
<translation>Isso exibirá a animação de caracteres personalizados definida na viewport assim que for pressionada.
Para criar uma, a pasta do seu personagem deve conter efeitos personalizados [webp/apng/gif/png]. E efeitos sonoros personalizados [wav/ogg/opus]</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="857"/>
+ <location filename="../../src/courtroom.cpp" line="913"/>
<source>Play realization sound and animation in the viewport on the next spoken message when checked.</source>
<translation>Tocar animação de som e performance na janela de desenho na seguinte mensagem falada quando marcada.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="863"/>
+ <location filename="../../src/courtroom.cpp" line="919"/>
<source>Shake the screen on next spoken message when checked.</source>
<translation>Agite a tela na próxima mensagem falada quando marcada.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="869"/>
+ <location filename="../../src/courtroom.cpp" line="925"/>
<source>Display the list of character folders you wish to mute.</source>
<translation>Exibe a lista de pastas de caracteres que você deseja silenciar.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="873"/>
- <location filename="../../src/courtroom.cpp" line="881"/>
+ <location filename="../../src/courtroom.cpp" line="929"/>
+ <location filename="../../src/courtroom.cpp" line="937"/>
<source>Increase the health bar.</source>
<translation>Aumente a barra de saúde.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="877"/>
- <location filename="../../src/courtroom.cpp" line="885"/>
+ <location filename="../../src/courtroom.cpp" line="933"/>
+ <location filename="../../src/courtroom.cpp" line="941"/>
<source>Decrease the health bar.</source>
<translation>Abaixe a barra de saúde.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="889"/>
+ <location filename="../../src/courtroom.cpp" line="945"/>
<source>Change the text color of the spoken message.
You can also select a part of your currently typed message and use the dropdown to change its color!</source>
<translation>Mude a cor do texto no chat IC.
Você também pode selecionar uma parte da sua mensagem escrita no momento e usar o menu suspenso para alterar sua cor!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="903"/>
+ <location filename="../../src/courtroom.cpp" line="959"/>
<source>Return back to the server list.</source>
<translation>Retorne à lista de servidores.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="916"/>
+ <location filename="../../src/courtroom.cpp" line="972"/>
<source>Become a spectator. You won&apos;t be able to interact with the in-character screen.</source>
<translation>Torne-se um espectador. Você não será capaz de interagir como personagem.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="1514"/>
- <location filename="../../src/courtroom.cpp" line="3452"/>
+ <location filename="../../src/courtroom.cpp" line="1615"/>
+ <location filename="../../src/courtroom.cpp" line="4001"/>
<source>CLIENT</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="2257"/>
- <location filename="../../src/courtroom.cpp" line="2259"/>
+ <location filename="../../src/courtroom.cpp" line="2034"/>
+ <location filename="../../src/courtroom.cpp" line="2122"/>
+ <location filename="../../src/courtroom.cpp" line="2197"/>
+ <source>HOLD IT!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2039"/>
+ <location filename="../../src/courtroom.cpp" line="2127"/>
+ <location filename="../../src/courtroom.cpp" line="2204"/>
+ <source>OBJECTION!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2044"/>
+ <location filename="../../src/courtroom.cpp" line="2132"/>
+ <location filename="../../src/courtroom.cpp" line="2213"/>
+ <source>TAKE THAT!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2056"/>
+ <location filename="../../src/courtroom.cpp" line="2144"/>
+ <location filename="../../src/courtroom.cpp" line="2233"/>
+ <source>CUSTOM OBJECTION!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2060"/>
+ <location filename="../../src/courtroom.cpp" line="2148"/>
+ <location filename="../../src/courtroom.cpp" line="3028"/>
+ <source>shouts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2071"/>
+ <location filename="../../src/courtroom.cpp" line="2158"/>
<source>has presented evidence</source>
<translation>apresentou evidência</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3166"/>
- <location filename="../../src/courtroom.cpp" line="3168"/>
+ <location filename="../../src/courtroom.cpp" line="3024"/>
+ <location filename="../../src/courtroom.cpp" line="3685"/>
+ <location filename="../../src/courtroom.cpp" line="3686"/>
+ <source>has stopped the music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3657"/>
+ <location filename="../../src/courtroom.cpp" line="3699"/>
+ <source>[MISSING] %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3689"/>
+ <location filename="../../src/courtroom.cpp" line="3690"/>
<source>has played a song</source>
<translation>tocou a música</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3302"/>
+ <location filename="../../src/courtroom.cpp" line="3827"/>
<source>You will now pair up with %1 if they also choose your character in return.</source>
<translation>Agora você será emparelhado com %1 se também escolher seu personagem.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3310"/>
+ <location filename="../../src/courtroom.cpp" line="3835"/>
<source>You are no longer paired with anyone.</source>
<translation>Você não está mais fazendo par com ninguém.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3315"/>
+ <location filename="../../src/courtroom.cpp" line="3840"/>
<source>Are you sure you typed that well? The char ID could not be recognised.</source>
<translation>Você tem certeza que você escreveu isso certo? O ID do personagem não pôde ser encontrado.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3330"/>
+ <location filename="../../src/courtroom.cpp" line="3856"/>
+ <source>You have set your offset to %1%%.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>You have set your offset to </source>
- <translation>Você definiu seu deslocamento como </translation>
+ <translation type="vanished">Você definiu seu deslocamento como </translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3337"/>
+ <location filename="../../src/courtroom.cpp" line="3861"/>
<source>Your offset must be between -100% and 100%!</source>
<translation>Seu deslocamento deve estar entre -100% e 100%!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3342"/>
+ <location filename="../../src/courtroom.cpp" line="3866"/>
<source>That offset does not look like one.</source>
<translation>Esse deslocamento não se parece com um.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3348"/>
+ <location filename="../../src/courtroom.cpp" line="3879"/>
+ <source>You have set your vertical offset to %1%%.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3886"/>
+ <source>Your vertical offset must be between -100% and 100%!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3891"/>
+ <source>That vertical offset does not look like one.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3897"/>
<source>You switched your music and area list.</source>
<translation>Você mudou sua lista de músicas e áreas.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3355"/>
+ <location filename="../../src/courtroom.cpp" line="3904"/>
<source>You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this.</source>
<translation>Você forçou recursos que o servidor pode não suportar. Você pode não conseguir falar de IC, ou pior, por causa disso.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3369"/>
+ <location filename="../../src/courtroom.cpp" line="3918"/>
<source>Your pre-animations interrupt again.</source>
<translation>Suas pré-animações interrompem novamente.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3372"/>
+ <location filename="../../src/courtroom.cpp" line="3921"/>
<source>Your pre-animations will not interrupt text.</source>
<translation>Suas pré-animações não interromperão o texto.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3383"/>
+ <location filename="../../src/courtroom.cpp" line="3932"/>
<source>Couldn&apos;t open chatlog.txt to write into.</source>
<translation>Não foi possível abrir o chatlog.txt para gravar.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3396"/>
+ <location filename="../../src/courtroom.cpp" line="3945"/>
<source>The IC chatlog has been saved.</source>
<translation>O chat do IC foi salvo.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3409"/>
+ <location filename="../../src/courtroom.cpp" line="3958"/>
<source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely the case file you&apos;re looking for can&apos;t be found in there.</source>
<translation>Você não possui uma pasta `base/cases/`! Foi feito para você, mas, como foi feito para você, provavelmente o arquivo do caso que você está procurando não pode ser encontrado lá.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3424"/>
+ <location filename="../../src/courtroom.cpp" line="3973"/>
<source>You need to give a filename to load (extension not needed)! Make sure that it is in the `base/cases/` folder, and that it is a correctly formatted ini.
Cases you can load: %1</source>
<translation>Você precisa fornecer um nome de arquivo para carregar (extensão não necessária)! Verifique se está na pasta `base/cases/` e se é um ini formatado corretamente.
Casos que você pode carregar: %1</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3436"/>
+ <location filename="../../src/courtroom.cpp" line="3985"/>
<source>Too many arguments to load a case! You only need one filename, without extension.</source>
<translation>Muitos argumentos para carregar um caso! Você só precisa de um nome de arquivo, sem extensão.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3453"/>
+ <location filename="../../src/courtroom.cpp" line="4002"/>
<source>Case made by %1.</source>
<translation>Caso feito por %1.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3462"/>
+ <location filename="../../src/courtroom.cpp" line="4012"/>
<source>Navigate to %1 for the CM doc.</source>
<translation>Navegue para %1 para o documento do CM.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3476"/>
- <location filename="../../src/courtroom.cpp" line="3478"/>
- <location filename="../../src/evidence.cpp" line="762"/>
- <location filename="../../src/evidence.cpp" line="764"/>
+ <location filename="../../src/courtroom.cpp" line="4034"/>
+ <location filename="../../src/courtroom.cpp" line="4036"/>
+ <location filename="../../src/evidence.cpp" line="765"/>
+ <location filename="../../src/evidence.cpp" line="767"/>
<source>UNKNOWN</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3486"/>
+ <location filename="../../src/courtroom.cpp" line="4044"/>
<source>Your case &quot;%1&quot; was loaded!</source>
<translation>Seu caso &quot;%1&quot; foi carregado!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3498"/>
+ <location filename="../../src/courtroom.cpp" line="4056"/>
<source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely that you somehow deleted it.</source>
<translation>Você não possui uma pasta `base/cases/`! Foi feito para você, mas, como foi feito para você, é provável que você o tenha excluído.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3513"/>
+ <location filename="../../src/courtroom.cpp" line="4071"/>
<source>You need to give a filename to save (extension not needed) and the courtroom status!</source>
<translation>Você deve fornecer um nome de arquivo para salvar (sem extensão necessária) e o estado do tribunal!</translation>
</message>
@@ -1223,78 +1357,83 @@ Casos que você pode carregar: %1</translation>
<translation type="obsolete">Muitos argumentos para salvar um caso! Você só precisa de um nome de arquivo sem extensão e o estado do tribunal.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3523"/>
+ <location filename="../../src/courtroom.cpp" line="4081"/>
<source>Too many arguments to save a case! You only need a filename without extension and the courtroom status!</source>
<translation>Muitos argumentos para salvar um caso! Você só precisa de um nome de arquivo sem extensão e o estado do tribunal.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3550"/>
+ <location filename="../../src/courtroom.cpp" line="4108"/>
<source>Succesfully saved, edit doc and cmdoc link on the ini!</source>
<translation>Salvo com sucesso, você pode editar o documento e o link do documento no arquivo ini!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3577"/>
+ <location filename="../../src/courtroom.cpp" line="4135"/>
<source>Master</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4084"/>
+ <location filename="../../src/courtroom.cpp" line="4617"/>
+ <source>Stop Current Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="4618"/>
<source>Play Random Song</source>
<translation>Tocar música aleatória</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4086"/>
+ <location filename="../../src/courtroom.cpp" line="4620"/>
<source>Expand All Categories</source>
<translation>Expandir todas as categorias</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4088"/>
+ <location filename="../../src/courtroom.cpp" line="4622"/>
<source>Collapse All Categories</source>
<translation>Recolher todas as categorias</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4092"/>
+ <location filename="../../src/courtroom.cpp" line="4626"/>
<source>Fade Out Previous</source>
<translation>Desvanecer Anterior</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4098"/>
+ <location filename="../../src/courtroom.cpp" line="4632"/>
<source>Fade In</source>
<translation>Aparecimento gradual</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4104"/>
+ <location filename="../../src/courtroom.cpp" line="4638"/>
<source>Synchronize</source>
<translation>Sincronizar</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4407"/>
+ <location filename="../../src/courtroom.cpp" line="4970"/>
<source>Default</source>
<translation>Predeterminado</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4573"/>
+ <location filename="../../src/courtroom.cpp" line="5153"/>
<source>Reason:</source>
<translation>Razão:</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4574"/>
+ <location filename="../../src/courtroom.cpp" line="5154"/>
<source>Call Moderator</source>
<translation>Chamar um Moderador</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4582"/>
- <location filename="../../src/courtroom.cpp" line="4586"/>
+ <location filename="../../src/courtroom.cpp" line="5162"/>
+ <location filename="../../src/courtroom.cpp" line="5166"/>
<source>Error</source>
<translation>Erro</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4582"/>
+ <location filename="../../src/courtroom.cpp" line="5162"/>
<source>You must provide a reason.</source>
<translation>Você deve fornecer um motivo.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4586"/>
+ <location filename="../../src/courtroom.cpp" line="5166"/>
<source>The message is too long.</source>
<translation>A mensagem é muito longa.</translation>
</message>
@@ -1361,28 +1500,28 @@ Você será perguntado se existem alterações não salvas.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="158"/>
- <location filename="../../src/evidence.cpp" line="617"/>
+ <location filename="../../src/evidence.cpp" line="619"/>
<source>Transfer evidence to private inventory.</source>
<translation>Transfira evidências para o inventário privado.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="163"/>
- <location filename="../../src/evidence.cpp" line="627"/>
+ <location filename="../../src/evidence.cpp" line="629"/>
<source>Transfer evidence to global inventory.</source>
<translation>Transfira evidências para o inventário global.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="263"/>
+ <location filename="../../src/evidence.cpp" line="264"/>
<source>The piece of evidence you&apos;ve been editing has changed.</source>
<translation>A evidência que você está editando mudou.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="264"/>
+ <location filename="../../src/evidence.cpp" line="265"/>
<source>Do you wish to keep your changes?</source>
<translation>Deseja manter suas alterações?</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="265"/>
+ <location filename="../../src/evidence.cpp" line="266"/>
<source>Name: %1
Image: %2
Description:
@@ -1393,131 +1532,146 @@ Descrição:
%3</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="387"/>
+ <location filename="../../src/evidence.cpp" line="388"/>
<source>Images (*.png)</source>
<translation>Imagens (* .png)</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="456"/>
- <location filename="../../src/evidence.cpp" line="460"/>
- <location filename="../../src/evidence.cpp" line="463"/>
+ <location filename="../../src/evidence.cpp" line="457"/>
+ <location filename="../../src/evidence.cpp" line="461"/>
+ <location filename="../../src/evidence.cpp" line="464"/>
<source>Double-click to edit...</source>
<translation>Clique duas vezes para editar...</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="478"/>
+ <location filename="../../src/evidence.cpp" line="479"/>
<source>Add new evidence...</source>
<translation>Adicionar nova evidência...</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="556"/>
+ <location filename="../../src/evidence.cpp" line="558"/>
<source>Evidence has been modified.</source>
<translation>A evidência foi modificada.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="557"/>
+ <location filename="../../src/evidence.cpp" line="559"/>
<source>Do you want to save your changes?</source>
<translation>Você quer salvar suas mudanças?</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="619"/>
+ <location filename="../../src/evidence.cpp" line="621"/>
<source>Current evidence is global. Click to switch to private.</source>
<translation>A evidência atual é global. Clique para mudar para privado.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="629"/>
+ <location filename="../../src/evidence.cpp" line="631"/>
<source>Current evidence is private. Click to switch to global.</source>
<translation>A evidência atual é privada. Clique para mudar para global.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="659"/>
+ <location filename="../../src/evidence.cpp" line="662"/>
<source>&quot;%1&quot; has been transferred.</source>
<translation>&quot;%1&quot; foi transferido.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="722"/>
+ <location filename="../../src/evidence.cpp" line="725"/>
<source>Save Inventory</source>
<translation>Salvar inventário</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="722"/>
- <location filename="../../src/evidence.cpp" line="748"/>
+ <location filename="../../src/evidence.cpp" line="725"/>
+ <location filename="../../src/evidence.cpp" line="751"/>
<source>Ini Files (*.ini)</source>
<translation>Arquivos INI (* .ini)</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="748"/>
+ <location filename="../../src/evidence.cpp" line="751"/>
<source>Open Inventory</source>
<translation>Abrir inventário</translation>
</message>
</context>
<context>
+ <name>DemoServer</name>
+ <message>
+ <location filename="../../src/demoserver.cpp" line="38"/>
+ <location filename="../../src/demoserver.cpp" line="152"/>
+ <source>Load Demo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/demoserver.cpp" line="38"/>
+ <location filename="../../src/demoserver.cpp" line="152"/>
+ <source>Demo Files (*.demo)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Lobby</name>
<message>
- <location filename="../../src/lobby.cpp" line="14"/>
+ <location filename="../../src/lobby.cpp" line="15"/>
<source>Attorney Online 2</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="33"/>
+ <location filename="../../src/lobby.cpp" line="35"/>
<source>Search</source>
<translation>Pesquisar</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="41"/>
+ <location filename="../../src/lobby.cpp" line="43"/>
<source>Name</source>
<translation>Nome</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="96"/>
+ <location filename="../../src/lobby.cpp" line="98"/>
<source>It doesn&apos;t look like your client is set up correctly.
Did you download all resources correctly from tiny.cc/getao, including the large &apos;base&apos; folder?</source>
<translation>Seu cliente não parece estar configurado corretamente.
Você baixou todos os recursos corretamente do tiny.cc/getao, incluindo a grande pasta &apos;base&apos;?</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="125"/>
+ <location filename="../../src/lobby.cpp" line="127"/>
<source>Version: %1</source>
<translation>Versão: %1</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="131"/>
+ <location filename="../../src/lobby.cpp" line="133"/>
<source>Settings</source>
<translation>Configurações</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="134"/>
+ <location filename="../../src/lobby.cpp" line="136"/>
<source>Allows you to change various aspects of the client.</source>
<translation>Permite alterar vários aspectos do cliente.</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="144"/>
- <location filename="../../src/lobby.cpp" line="433"/>
+ <location filename="../../src/lobby.cpp" line="146"/>
+ <location filename="../../src/lobby.cpp" line="438"/>
<source>Offline</source>
<translation>Offline</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="178"/>
+ <location filename="../../src/lobby.cpp" line="180"/>
<source>Loading</source>
<translation>Carregando</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="182"/>
+ <location filename="../../src/lobby.cpp" line="184"/>
<source>Cancel</source>
<translation>Cancelar</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="361"/>
+ <location filename="../../src/lobby.cpp" line="366"/>
<source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Client development:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;QA testing:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!&lt;p&gt;The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.&lt;p&gt;Running on Qt version %2 with the BASS audio engine.&lt;br&gt;APNG plugin loaded: %3&lt;p&gt;Built on %4</source>
<translation>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;O simulador de drama jurídico&lt;p&gt;&lt;b&gt;Código fonte:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Desenvolvimento principal:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Desenvolvimento de cliente:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;Teste de controle de qualidade:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Agradecimentos especiais:&lt;/b&gt;&lt;br&gt;CrazyJC y MaximumVolty (versão 2.8); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, y FanatSors (AO1); server hosts, game masters, case makers, criadores de conteúdo e toda a comunidade AO2.&lt;p&gt;O projeto Attorney Online possui direitos autorais (c) 2016-2020 Attorney Online developers. Aplicam-se licenças de código aberto. Todos os outros ativos são de propriedade de seus respectivos proprietários.&lt;p&gt;Usando a versão Qt %2 com o mecanismo de áudio BASS..&lt;br&gt;Plugin APNG carregado: %3&lt;p&gt;Compilado em %4</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="393"/>
+ <location filename="../../src/lobby.cpp" line="398"/>
<source>Yes</source>
<translation>Sim</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="393"/>
+ <location filename="../../src/lobby.cpp" line="398"/>
<source>No</source>
<translation>Não</translation>
</message>
@@ -1530,7 +1684,7 @@ Você baixou todos os recursos corretamente do tiny.cc/getao, incluindo a grande
<translation type="obsolete">&lt;h2&gt;Attorney Online %1&lt;/h2&gt;O simulador de drama jurídico&lt;p&gt;&lt;b&gt;Código fonte:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Desenvolvimento principal:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Desenvolvimento de cliente:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;Teste de controle de qualidade:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Agradecimentos especiais:&lt;/b&gt;&lt;br&gt;CrazyJC y MaximumVolty (versão 2.8); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, y FanatSors (AO1); server hosts, game masters, case makers, criadores de conteúdo e toda a comunidade AO2.&lt;p&gt;O projeto Attorney Online possui direitos autorais (c) 2016-2020 Attorney Online developers. Aplicam-se licenças de código aberto. Todos os outros ativos são de propriedade de seus respectivos proprietários.&lt;p&gt;Usando a versão Qt %2 com o mecanismo de áudio %3.&lt;p&gt;Compilado em %4</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="395"/>
+ <location filename="../../src/lobby.cpp" line="400"/>
<source>About</source>
<translation>Sobre</translation>
</message>
@@ -1543,7 +1697,7 @@ Você baixou todos os recursos corretamente do tiny.cc/getao, incluindo a grande
<translation type="obsolete">&lt;h2&gt;Attorney Online %1&lt;/h2&gt;O simulador de drama jurídico&lt;p&gt;&lt;b&gt;Código fonte:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Desenvolvimento principal:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;Agradecimentos especiais:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="537"/>
+ <location filename="../../src/lobby.cpp" line="551"/>
<source>Online: %1/%2</source>
<translation>Online: %1/%2</translation>
</message>
@@ -1565,17 +1719,17 @@ Você baixou todos os recursos corretamente do tiny.cc/getao, incluindo a grande
<context>
<name>debug_functions</name>
<message>
- <location filename="../../src/debug_functions.cpp" line="10"/>
+ <location filename="../../src/debug_functions.cpp" line="13"/>
<source>Error: %1</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/debug_functions.cpp" line="13"/>
+ <location filename="../../src/debug_functions.cpp" line="16"/>
<source>Error</source>
<translation></translation>
</message>
<message>
- <location filename="../../src/debug_functions.cpp" line="25"/>
+ <location filename="../../src/debug_functions.cpp" line="29"/>
<source>Notice</source>
<translation></translation>
</message>
diff --git a/resource/translations/ao_ru.qm b/resource/translations/ao_ru.qm
index 19bf0a95..6847fc96 100644
--- a/resource/translations/ao_ru.qm
+++ b/resource/translations/ao_ru.qm
Binary files differ
diff --git a/resource/translations/ao_ru.ts b/resource/translations/ao_ru.ts
index e2e04b90..eedbb17e 100644
--- a/resource/translations/ao_ru.ts
+++ b/resource/translations/ao_ru.ts
@@ -4,17 +4,17 @@
<context>
<name>AOApplication</name>
<message>
- <location filename="../../src/aoapplication.cpp" line="129"/>
+ <location filename="../../src/aoapplication.cpp" line="133"/>
<source>Disconnected from server.</source>
<translation>Соединение Ñ Ñервером разорвано.</translation>
</message>
<message>
- <location filename="../../src/aoapplication.cpp" line="152"/>
+ <location filename="../../src/aoapplication.cpp" line="156"/>
<source>Error connecting to master server. Will try again in %1 seconds.</source>
<translation>Ошибка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Ð³Ð»Ð°Ð²Ð½Ñ‹Ð¼ Ñервером. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ð½Ð°Ñ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ· %1 Ñ.</translation>
</message>
<message>
- <location filename="../../src/aoapplication.cpp" line="157"/>
+ <location filename="../../src/aoapplication.cpp" line="161"/>
<source>There was an error connecting to the master server.
We deploy multiple master servers to mitigate any possible downtime, but the client appears to have exhausted all possible methods of finding and connecting to one.
Please check your Internet connection and firewall, and please try again.</source>
@@ -23,7 +23,7 @@ Please check your Internet connection and firewall, and please try again.</sourc
ПожалуйÑта, проверьте ваши наÑтройки браундмауÑра и Ñоединение Ñ Ð˜Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚Ð¾Ð¼ попробуйте перезайти.</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="94"/>
+ <location filename="../../src/packet_distribution.cpp" line="93"/>
<source>Outdated version! Your version: %1
Please go to aceattorneyonline.com to update.</source>
<translation>УÑÑ‚Ð°Ñ€ÐµÐ²ÑˆÐ°Ñ Ð²ÐµÑ€ÑиÑ! У Ð²Ð°Ñ ÑƒÑтановлена верÑÐ¸Ñ %1
@@ -36,54 +36,51 @@ Have a nice day.</source>
Ð’Ñего хорошего.</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="253"/>
+ <location filename="../../src/packet_distribution.cpp" line="263"/>
<source>Attorney Online 2</source>
<translation>Attorney Online 2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="281"/>
+ <location filename="../../src/packet_distribution.cpp" line="289"/>
<source>Loading</source>
<translation>Загрузка</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="384"/>
<source>Loading evidence:
%1/%2</source>
- <translation>Загрузка улик:
+ <translation type="vanished">Загрузка улик:
%1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="419"/>
- <location filename="../../src/packet_distribution.cpp" line="513"/>
+ <location filename="../../src/packet_distribution.cpp" line="374"/>
<source>Loading music:
%1/%2</source>
<translation>Загрузка музыки:
%1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="337"/>
- <location filename="../../src/packet_distribution.cpp" line="486"/>
+ <location filename="../../src/packet_distribution.cpp" line="346"/>
<source>Loading chars:
%1/%2</source>
<translation>Загрузка перÑонажей:
%1/%2</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="695"/>
+ <location filename="../../src/packet_distribution.cpp" line="578"/>
<source>You have been kicked from the server.
Reason: %1</source>
<translation>Ð’Ð°Ñ Ð²Ñ‹Ð¿Ð½ÑƒÐ»Ð¸ Ñ Ñервера.
Причина: %1</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="703"/>
+ <location filename="../../src/packet_distribution.cpp" line="586"/>
<source>You have been banned from the server.
Reason: %1</source>
<translation>Ð’Ñ‹ были забанены на Ñервере.
Причина: %1</translation>
</message>
<message>
- <location filename="../../src/packet_distribution.cpp" line="711"/>
+ <location filename="../../src/packet_distribution.cpp" line="594"/>
<source>You are banned on this server.
Reason: %1</source>
<translation>Ð’Ñ‹ забанены на Ñтом Ñервере.
@@ -185,349 +182,419 @@ Reason: </source>
ПоÑтавьте 0 или отрицательное значение, чтобы ÑнÑть ограничение.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="133"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="125"/>
+ <source>Log newline:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="127"/>
+ <source>If ticked, new messages will appear separated, with the message coming on the next line after the name. When unticked, it displays it as &apos;name: message&apos;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="140"/>
+ <source>Log margin:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="141"/>
+ <source>The distance in pixels between each entry in the IC log. Default: 0.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="155"/>
+ <source>Log timestamp:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="157"/>
+ <source>If ticked, log will contain a timestamp in UTC before the name.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="168"/>
+ <source>Log IC actions:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="170"/>
+ <source>If ticked, log will show IC actions such as shouting and presenting evidence.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="182"/>
+ <source>Text Stay Time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="183"/>
+ <source>Minimum amount of time (in miliseconds) an IC message must stay on screen before the next IC message is shown, acting as a &apos;queue&apos;. Set to 0 to disable this behavior.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="197"/>
+ <source>Desynchronize IC Logs:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="199"/>
+ <source>If ticked, log will show messages as-received, while viewport will parse according to the queue (Text Stay Time).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="210"/>
+ <source>Instant Objection:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="212"/>
+ <source>If Text Stay Time is more than 0, instant objection will skip queued messages instead of waiting to catch up.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="231"/>
<source>Default username:</source>
<translation>Ðикнейм по умолчанию:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="135"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="233"/>
<source>Your OOC name will be automatically set to this value when you join a server.</source>
<translation>ПÑевдоним по умолчанию Ð´Ð»Ñ ÐžÐžÐ¡-чата.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="148"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="246"/>
<source>Custom shownames:</source>
<translation>ПользовательÑкие имена:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="150"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="248"/>
<source>Gives the default value for the in-game &apos;Custom shownames&apos; tickbox, which in turn determines whether the client should display custom in-character names.</source>
<translation>Задать значение по умолчанию Ð´Ð»Ñ Ð½Ð°Ñтройки Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑких имён,
ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñет возможноÑть показа в игровом чате имён перÑонажей, уÑтановленных Ñамими игроками.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="170"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="268"/>
<source>Backup MS:</source>
<translation>ЗапаÑной ГС:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="172"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="270"/>
<source>If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address.</source>
<translation>ЕÑли клиент не Ñможет ÑоединитьÑÑ Ñ Ð²Ñтроенным главным Ñервером (ГС), он проверит адреÑа из Ñтого ÑпиÑка.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="185"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="283"/>
<source>Discord:</source>
<translation>Discord:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="187"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="285"/>
<source>Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for.</source>
<translation>Показывать в Discord Ñервер, на котором вы играете, вашего перÑонажа и продолжительноÑть игры.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="200"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="298"/>
<source>Language:</source>
<translation>Язык:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="202"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="300"/>
<source>Sets the language if you don&apos;t want to use your system language.</source>
<translation>ИзменÑет Ñзык интерфейÑа программы, еÑли вы не хотите иÑпользовать Ñзык ÑиÑтемы.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="208"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="306"/>
<source> - Keep current setting</source>
<translation> - Ñохранить текущие наÑтройки</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="222"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="320"/>
<source>Allow Screenshake:</source>
<translation>Ð’ÑтрÑÑка Ñкрана:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="224"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="322"/>
<source>Allows screenshaking. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source>
<translation>Разрешить показ вÑтрÑÑок Ñкрана. Отключите, еÑли вы Ñтрадаете от ÑветочувÑтвительноÑти и/или припадков.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="236"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="334"/>
<source>Allow Effects:</source>
<translation>Визуальные Ñффекты:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="238"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="336"/>
<source>Allows screen effects. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source>
<translation>Разрешить показ визуальных Ñффектов. Отключите, еÑли вы Ñтрадаете от ÑветочувÑтвительноÑти и/или припадков.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="250"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="348"/>
<source>Network Frame Effects:</source>
<translation>Эффекты по Ñети:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="251"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="349"/>
<source>Send screen-shaking, flashes and sounds as defined in the char.ini over the network. Only works for servers that support this functionality.</source>
<translation>Разрешить отправку звуков, Ñффектов вÑпышек и вÑтрÑÑки Ñкрана по Ñети в ÑоответÑтвии Ñ char.ini.
Работает только на Ñерверах, поддерживающих данную функцию.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="264"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="362"/>
<source>Colors in IC Log:</source>
<translation>Цвета в иÑтории чата:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="266"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="364"/>
<source>Use the markup colors in the server IC chatlog.</source>
<translation>Отображать цвета в иÑтории игрового чата.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="277"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="375"/>
<source>Sticky Sounds:</source>
<translation>Закрепить звуки:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="279"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="377"/>
<source>Turn this on to prevent the sound dropdown from clearing the sound after playing it.</source>
<translation>Ðе ÑбраÑывать выбранные наÑтройки звука поÑле его воÑпроизведениÑ.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="291"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="389"/>
<source>Sticky Effects:</source>
<translation>Закрепить Ñффекты:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="293"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="391"/>
<source>Turn this on to prevent the effects dropdown from clearing the effect after playing it.</source>
<translation>Ðе ÑбраÑывать выбранные наÑтройки Ñффекта поÑле его воÑпроизведениÑ.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="306"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="404"/>
<source>Sticky Preanims:</source>
<translation>Закрепить пред. анимации:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="308"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="406"/>
<source>Turn this on to prevent preanimation checkbox from clearing after playing the emote.</source>
<translation>Ðе ÑбраÑывать наÑтройки пред. анимации поÑле её воÑпроизведениÑ.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="320"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="418"/>
<source>Custom Chatboxes:</source>
<translation>ПользовательÑкие подложки:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="322"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="420"/>
<source>Turn this on to allow characters to define their own custom chat box designs.</source>
<translation>Отображать дизайны подложек, заданные перÑонажами.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="340"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="438"/>
<source>Callwords</source>
<translation>Позывные</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="367"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="465"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!&lt;br&gt;Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Введите на отдельных Ñтроках Ñвои позывные. ЕÑли кто-то в чате напишет их, вы уÑлышите звуковой Ñигнал. РегиÑтр Ñимволов не учитываетÑÑ.&lt;br&gt;Ðе оÑтавлÑйте в конце Ñтрок пробелы, иначе вы будете получать Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¾ каждом пробеле в чате.&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="377"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="475"/>
<source>Audio</source>
<translation>Ðудио</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="391"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="489"/>
<source>Audio device:</source>
<translation>УÑтройÑтво воÑпроизведениÑ:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="392"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="490"/>
<source>Sets the audio device for all sounds.</source>
<translation>Укажите уÑтройÑтво вывода вÑего аудио игры.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="435"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="523"/>
<source>Music:</source>
<translation>Музыка:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="436"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="524"/>
<source>Sets the music&apos;s default volume.</source>
<translation>ГромкоÑть музыки по умолчанию.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="450"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="538"/>
<source>SFX:</source>
<translation>Звук. Ñффекты:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="452"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="540"/>
<source>Sets the SFX&apos;s default volume. Interjections and actual sound effects count as &apos;SFX&apos;.</source>
<translation>ГромкоÑть звуковых Ñффектов по умолчанию. Ð’ категорию Ñффектов также входÑÑ‚ возглаÑÑ‹.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="466"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="554"/>
<source>Blips:</source>
<translation>Сигналы:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="468"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="556"/>
<source>Sets the volume of the blips, the talking sound effects.</source>
<translation>ГромкоÑть Ñигналов, заменÑющих голоÑ, по умолчанию.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="490"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="578"/>
<source>Blip rate:</source>
<translation>ЧаÑтота Ñигналов:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="492"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="580"/>
<source>Sets the delay between playing the blip sounds.</source>
<translation>Задержка по умолчанию между Ñигналами, заменÑющими голоÑ.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="500"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="588"/>
<source>Play a blip sound &quot;once per every X symbols&quot;, where X is the blip rate.</source>
<translation>Проигрывать Ñигнал &quot;каждые Ð¥ Ñимволов&quot;, где Ð¥ - чаÑтота.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="507"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="595"/>
<source>Blank blips:</source>
<translation>ПуÑтые Ñигналы:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="509"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="597"/>
<source>If true, the game will play a blip sound even when a space is &apos;being said&apos;.</source>
<translation>Проигрывать Ñигналы даже Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð¾Ð².</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="521"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="609"/>
<source>Enable Looping SFX:</source>
<translation>Повтор звук. Ñффектов:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="522"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="610"/>
<source>If true, the game will allow looping sound effects to play on preanimations.</source>
<translation>Разрешить воÑпроизведение зацикленных звуковых Ñффектов во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ анимации.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="534"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="622"/>
<source>Kill Music On Objection:</source>
<translation>Тишина при протеÑте:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="536"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="624"/>
<source>If true, AO2 will stop the music for you when you or someone else does &apos;Objection!&apos;.</source>
<translation>ОÑтанавливать музыку, когда кто-нибудь кричит &quot;Objection!&quot;.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="548"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="636"/>
<source>Casing</source>
<translation>ЗаÑеданиÑ</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="565"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="653"/>
<source>This server supports case alerts.</source>
<translation>Этот Ñервер поддерживает объÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ñеданий.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="568"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="656"/>
<source>This server does not support case alerts.</source>
<translation>Этот Ñервер не поддерживает объÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ñеданий.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="569"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="657"/>
<source>Pretty self-explanatory.</source>
<translation>Дополнительные поÑÑÐ½ÐµÐ½Ð¸Ñ Ð½Ðµ требуютÑÑ.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="578"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="666"/>
<source>Casing:</source>
<translation>ЗаÑеданиÑ:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="580"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="668"/>
<source>If checked, you will get alerts about case announcements.</source>
<translation>Ð’Ñ‹ получите уведомление, когда будет объÑвлено заÑедание.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="596"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="684"/>
<source>Defense:</source>
<translation>Защита:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="597"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="685"/>
<source>If checked, you will get alerts about case announcements if a defense spot is open.</source>
<translation>Ð’Ñ‹ получите уведомление при объÑвлении дела, в котором нужна Ñторона защиты.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="611"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="699"/>
<source>Prosecution:</source>
<translation>Обвинение:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="613"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="701"/>
<source>If checked, you will get alerts about case announcements if a prosecutor spot is open.</source>
<translation>Ð’Ñ‹ получите уведомление при объÑвлении дела, в котором нужна Ñторона обвинениÑ.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="627"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="715"/>
<source>Judge:</source>
<translation>СудьÑ:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="628"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="716"/>
<source>If checked, you will get alerts about case announcements if the judge spot is open.</source>
<translation>Ð’Ñ‹ получите уведомление при объÑвлении дела, в котором нужен ÑудьÑ.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="642"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="730"/>
<source>Juror:</source>
<translation>ПриÑÑжные:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="643"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="731"/>
<source>If checked, you will get alerts about case announcements if a juror spot is open.</source>
<translation>Ð’Ñ‹ получите уведомление при объÑвлении дела, в котором нужны приÑÑжные заÑедатели.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="657"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="745"/>
<source>Stenographer:</source>
<translation>СтенографиÑÑ‚:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="659"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="747"/>
<source>If checked, you will get alerts about case announcements if a stenographer spot is open.</source>
<translation>Ð’Ñ‹ получите уведомление при объÑвлении дела, в котором нужна ÑтенографиÑ.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="673"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="761"/>
<source>CM:</source>
<translation>ПД:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="675"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="763"/>
<source>If checked, you will appear amongst the potential CMs on the server.</source>
<translation>Отметьте, еÑли хотите ÑоÑтоÑть в чиÑле возможных производителей дел (ПД).</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="689"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="777"/>
<source>Hosting cases:</source>
<translation>Проведение дел:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="691"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="779"/>
<source>If you&apos;re a CM, enter what cases you are willing to host.</source>
<translation>ЕÑли вы производитель дел (ПД), укажите, какими делами вы хотите заниматьÑÑ.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="705"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="793"/>
<source>Automatic Logging:</source>
<translation>Ðвт. Ñохранение иÑтории:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="707"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="795"/>
<source>If checked, all logs will be automatically written in the /logs folder.</source>
<translation>ÐвтоматичеÑки ÑохранÑть вÑÑŽ иÑторию чатов в папке /logs.</translation>
</message>
@@ -535,33 +602,33 @@ Reason: </source>
<context>
<name>Courtroom</name>
<message>
- <location filename="../../src/charselect.cpp" line="21"/>
+ <location filename="../../src/charselect.cpp" line="23"/>
<source>Password</source>
<translation>Пароль</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="27"/>
+ <location filename="../../src/charselect.cpp" line="29"/>
<source>Spectator</source>
<translation>Зритель</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="30"/>
- <location filename="../../src/courtroom.cpp" line="175"/>
+ <location filename="../../src/charselect.cpp" line="32"/>
+ <location filename="../../src/courtroom.cpp" line="153"/>
<source>Search</source>
<translation>ПоиÑк</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="35"/>
+ <location filename="../../src/charselect.cpp" line="37"/>
<source>Passworded</source>
<translation>Защищён паролем</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="39"/>
+ <location filename="../../src/charselect.cpp" line="41"/>
<source>Taken</source>
<translation>ЗанÑÑ‚</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="236"/>
+ <location filename="../../src/charselect.cpp" line="239"/>
<source>Generating chars:
%1/%2</source>
<translation>Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€Ñонажей:
@@ -574,53 +641,53 @@ Reason: </source>
</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="148"/>
+ <location filename="../../src/courtroom.cpp" line="126"/>
<source>Showname</source>
<translation>ИмÑ</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="152"/>
+ <location filename="../../src/courtroom.cpp" line="130"/>
<source>Message</source>
<translation>Сообщение</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="167"/>
+ <location filename="../../src/courtroom.cpp" line="145"/>
<source>Name</source>
<translation>Ðикнейм</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="217"/>
+ <location filename="../../src/courtroom.cpp" line="195"/>
<source>Pre</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="220"/>
+ <location filename="../../src/courtroom.cpp" line="198"/>
<source>Flip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="224"/>
+ <location filename="../../src/courtroom.cpp" line="202"/>
<source>Guard</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="228"/>
+ <location filename="../../src/courtroom.cpp" line="206"/>
<source>Additive</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="233"/>
- <location filename="../../src/courtroom.cpp" line="822"/>
+ <location filename="../../src/courtroom.cpp" line="211"/>
+ <location filename="../../src/courtroom.cpp" line="847"/>
<source>Casing</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ЗаÑеданиÑ</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="238"/>
+ <location filename="../../src/courtroom.cpp" line="216"/>
<source>Shownames</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="241"/>
+ <location filename="../../src/courtroom.cpp" line="219"/>
<source>Immediate</source>
<translation type="unfinished"></translation>
</message>
@@ -653,153 +720,187 @@ Reason: </source>
<translation type="obsolete">Ð’ общем-то, Ñто ни на что не влиÑет...</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3444"/>
+ <location filename="../../src/courtroom.cpp" line="3973"/>
<source>You need to give a filename to load (extension not needed)! Make sure that it is in the `base/cases/` folder, and that it is a correctly formatted ini.
Cases you can load: %1</source>
<translation>Укажите Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ñ Ð´ÐµÐ»Ð¾Ð¼ (без раÑширениÑ) Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸. УбедитеÑÑŒ, что он раÑположен в папке `base/cases`, и что Ñто правильно отформатированный файл .ini.
Ð’Ñ‹ можете загрузить Ñледующие дела: %1</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3473"/>
+ <location filename="../../src/courtroom.cpp" line="4002"/>
<source>Case made by %1.</source>
<translation>Ðвтор дела: %1.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3482"/>
+ <location filename="../../src/courtroom.cpp" line="4012"/>
<source>Navigate to %1 for the CM doc.</source>
<translation>Откройте %1 Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¼Ð°Ñ‚ÐµÑ€Ð¸Ð°Ð»Ð¾Ð² дела.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3506"/>
+ <location filename="../../src/courtroom.cpp" line="4044"/>
<source>Your case &quot;%1&quot; was loaded!</source>
<translation>Ваше дело &quot;%1&quot; было загружено!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="774"/>
- <location filename="../../src/courtroom.cpp" line="3604"/>
+ <location filename="../../src/courtroom.cpp" line="799"/>
+ <location filename="../../src/courtroom.cpp" line="4142"/>
<source>Server</source>
<translation>Сервер</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="143"/>
+ <location filename="../../src/courtroom.cpp" line="121"/>
+ <location filename="../../src/courtroom.cpp" line="3652"/>
+ <location filename="../../src/courtroom.cpp" line="3694"/>
+ <location filename="../../src/courtroom.cpp" line="4415"/>
<source>None</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="756"/>
+ <location filename="../../src/courtroom.cpp" line="254"/>
+ <source>% x offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="257"/>
+ <source>% y offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="609"/>
+ <source>Change the horizontal percentage offset of your character&apos;s position from the center of the screen.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="616"/>
+ <source>Change the vertical percentage offset of your character&apos;s position from the center of the screen.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="721"/>
+ <source>Set an &apos;iniswap&apos;, or an alternative character folder to refer to from your current character.
+Edit by typing and pressing Enter, [X] to remove. This saves to your base/iniswaps.ini</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="746"/>
+ <source>Remove the currently selected sound effect.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="781"/>
<source>Hold It!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="757"/>
- <location filename="../../src/courtroom.cpp" line="763"/>
- <location filename="../../src/courtroom.cpp" line="769"/>
+ <location filename="../../src/courtroom.cpp" line="782"/>
+ <location filename="../../src/courtroom.cpp" line="788"/>
+ <location filename="../../src/courtroom.cpp" line="794"/>
<source>When this is turned on, your next in-character message will be a shout!</source>
<translation>Когда Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, ваше Ñледующее Ñообщение в игровом чате будет Ñ Ð²Ð¾Ð·Ð³Ð»Ð°Ñом!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="762"/>
+ <location filename="../../src/courtroom.cpp" line="787"/>
<source>Objection!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="768"/>
+ <location filename="../../src/courtroom.cpp" line="793"/>
<source>Take That!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="776"/>
+ <location filename="../../src/courtroom.cpp" line="801"/>
<source>Toggle between server chat and global AO2 chat.</source>
<translation>Переключатель между чатом Ñервера и общим чатом AO2.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="780"/>
- <location filename="../../src/courtroom.cpp" line="784"/>
- <location filename="../../src/courtroom.cpp" line="790"/>
- <location filename="../../src/courtroom.cpp" line="794"/>
+ <location filename="../../src/courtroom.cpp" line="805"/>
+ <location filename="../../src/courtroom.cpp" line="809"/>
+ <location filename="../../src/courtroom.cpp" line="815"/>
+ <location filename="../../src/courtroom.cpp" line="819"/>
<source>This will display the animation in the viewport as soon as it is pressed.</source>
<translation>Показать анимацию в игровом чате Ñразу поÑле нажатиÑ.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="788"/>
+ <location filename="../../src/courtroom.cpp" line="813"/>
<source>Guilty!</source>
<translation>Виновен!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="801"/>
+ <location filename="../../src/courtroom.cpp" line="826"/>
<source>Bring up the Character Select Screen and change your character.</source>
<translation>Перейти на Ñкран выбора и Ñменить перÑонажа.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="807"/>
+ <location filename="../../src/courtroom.cpp" line="832"/>
<source>Refresh the theme and update all of the ui elements to match.</source>
<translation>Перезагрузить тему и обновить вÑе Ñлементы интерфейÑа.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="813"/>
+ <location filename="../../src/courtroom.cpp" line="838"/>
<source>Request the attention of the current server&apos;s moderator.</source>
<translation>Привлечь внимание модератора Ñервера.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="819"/>
+ <location filename="../../src/courtroom.cpp" line="844"/>
<source>Allows you to change various aspects of the client.</source>
<translation>Изменить параметры работы программы.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="825"/>
+ <location filename="../../src/courtroom.cpp" line="850"/>
<source>An interface to help you announce a case (you have to be a CM first to be able to announce cases)</source>
<translation>Открыть окно, которое позволит вам объÑвить о деле
(Ð´Ð»Ñ Ñтого нужно быть производителем дел (ПД))</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="831"/>
+ <location filename="../../src/courtroom.cpp" line="856"/>
<source>Switch between Areas and Music lists</source>
<translation>Переключатель между ÑпиÑками музыки и локаций</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="836"/>
+ <location filename="../../src/courtroom.cpp" line="861"/>
<source>Play a single-shot animation as defined by the emote when checked.</source>
<translation>Показать разовую анимацию, ÑоответÑтвующую выбранной Ñмоции.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="840"/>
+ <location filename="../../src/courtroom.cpp" line="864"/>
<source>If preanim is checked, display the input text immediately as the animation plays concurrently.</source>
<translation>ЕÑли включена Ð¿Ñ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ: вывеÑти текÑÑ‚, не дожидаÑÑÑŒ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ анимации.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="844"/>
+ <location filename="../../src/courtroom.cpp" line="882"/>
<source>Mirror your character&apos;s emotes when checked.</source>
<translation>Отразить анимации перÑонажа по горизонтали.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="848"/>
+ <location filename="../../src/courtroom.cpp" line="886"/>
<source>Add text to your last spoken message when checked.</source>
<translation>ДобавлÑть текÑÑ‚ к Ñвоему поÑледнему Ñообщению.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="852"/>
+ <location filename="../../src/courtroom.cpp" line="890"/>
<source>Do not listen to mod calls when checked, preventing them from playing sounds or focusing attention on the window.</source>
<translation>Заглушить вызовы модератора: вы не будете получать звуковые оповещениÑ, а игра не будет привлекать к Ñебе внимание.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="856"/>
+ <location filename="../../src/courtroom.cpp" line="894"/>
<source>Lets you receive case alerts when enabled.
(You can set your preferences in the Settings!)</source>
<translation>Получать ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ заÑеданиÑÑ….
(См. подробнее в меню опций)</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="861"/>
+ <location filename="../../src/courtroom.cpp" line="899"/>
<source>Display customized shownames for all users when checked.</source>
<translation>Показывать пользовательÑкие имена Ð´Ð»Ñ Ð²Ñех.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="864"/>
+ <location filename="../../src/courtroom.cpp" line="902"/>
<source>Custom Shout!</source>
<translation>ПользовательÑкий возглаÑ!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="867"/>
+ <location filename="../../src/courtroom.cpp" line="905"/>
<source>This will display the custom character-defined animation in the viewport as soon as it is pressed.
To make one, your character&apos;s folder must contain custom.[webp/apng/gif/png] and custom.[wav/ogg/opus] sound effect</source>
<translation>Показать в игровом чате анимацию, уникальную Ð´Ð»Ñ Ð¿ÐµÑ€Ñонажа, Ñразу поÑле нажатиÑ.
@@ -807,57 +908,115 @@ To make one, your character&apos;s folder must contain custom.[webp/apng/gif/png
в формате webp/apng/gif/png и звук в формате wav/ogg/opus</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="875"/>
+ <location filename="../../src/courtroom.cpp" line="913"/>
<source>Play realization sound and animation in the viewport on the next spoken message when checked.</source>
<translation>Показать вÑпышку и воÑпроизвеÑти звук Ð¾Ð·Ð°Ñ€ÐµÐ½Ð¸Ñ Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° Ñледующей реплики.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="881"/>
+ <location filename="../../src/courtroom.cpp" line="919"/>
<source>Shake the screen on next spoken message when checked.</source>
<translation>ПотрÑÑти Ñкран во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° Ñледующей реплики.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="887"/>
+ <location filename="../../src/courtroom.cpp" line="925"/>
<source>Display the list of character folders you wish to mute.</source>
<translation>Выбрать перÑонажей, которых нужно игнорировать.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="891"/>
- <location filename="../../src/courtroom.cpp" line="899"/>
+ <location filename="../../src/courtroom.cpp" line="929"/>
+ <location filename="../../src/courtroom.cpp" line="937"/>
<source>Increase the health bar.</source>
<translation>Поощрить.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="895"/>
- <location filename="../../src/courtroom.cpp" line="903"/>
+ <location filename="../../src/courtroom.cpp" line="933"/>
+ <location filename="../../src/courtroom.cpp" line="941"/>
<source>Decrease the health bar.</source>
<translation>Оштрафовать.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="907"/>
+ <location filename="../../src/courtroom.cpp" line="945"/>
<source>Change the text color of the spoken message.
You can also select a part of your currently typed message and use the dropdown to change its color!</source>
<translation>Изменить цвет текÑта ÑообщениÑ.
Ð’Ñ‹ также можете выделить чаÑть текÑта и изменить только её цвет в выпадающем меню.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="920"/>
+ <location filename="../../src/courtroom.cpp" line="958"/>
<source>Back to Lobby</source>
<translation>Ðазад в лобби</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3188"/>
- <location filename="../../src/courtroom.cpp" line="4656"/>
- <location filename="../../src/courtroom.cpp" line="4663"/>
+ <location filename="../../src/courtroom.cpp" line="2034"/>
+ <location filename="../../src/courtroom.cpp" line="2122"/>
+ <location filename="../../src/courtroom.cpp" line="2197"/>
+ <source>HOLD IT!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2039"/>
+ <location filename="../../src/courtroom.cpp" line="2127"/>
+ <location filename="../../src/courtroom.cpp" line="2204"/>
+ <source>OBJECTION!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2044"/>
+ <location filename="../../src/courtroom.cpp" line="2132"/>
+ <location filename="../../src/courtroom.cpp" line="2213"/>
+ <source>TAKE THAT!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2056"/>
+ <location filename="../../src/courtroom.cpp" line="2144"/>
+ <location filename="../../src/courtroom.cpp" line="2233"/>
+ <source>CUSTOM OBJECTION!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2060"/>
+ <location filename="../../src/courtroom.cpp" line="2148"/>
+ <location filename="../../src/courtroom.cpp" line="3028"/>
+ <source>shouts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2071"/>
+ <location filename="../../src/courtroom.cpp" line="2158"/>
+ <source>has presented evidence</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3024"/>
+ <location filename="../../src/courtroom.cpp" line="3685"/>
+ <location filename="../../src/courtroom.cpp" line="3686"/>
+ <source>has stopped the music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3657"/>
+ <location filename="../../src/courtroom.cpp" line="3699"/>
+ <source>[MISSING] %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3689"/>
+ <location filename="../../src/courtroom.cpp" line="3690"/>
<source>has played a song</source>
<translation>включил(а) композицию</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3322"/>
+ <location filename="../../src/courtroom.cpp" line="3827"/>
<source>You will now pair up with %1 if they also choose your character in return.</source>
<translation>Ð’Ñ‹ вÑтанете Ñ€Ñдом Ñ %1, еÑли он(а) выберет вашего перÑонажа.</translation>
</message>
<message>
+ <location filename="../../src/courtroom.cpp" line="3856"/>
+ <source>You have set your offset to %1%%.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Rainbow</source>
<translation type="obsolete">Радужный</translation>
</message>
@@ -870,71 +1029,67 @@ You can also select a part of your currently typed message and use the dropdown
<translation type="obsolete">Голубой</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="276"/>
<source>% offset</source>
- <translation>% Ñдвига</translation>
+ <translation type="vanished">% Ñдвига</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="279"/>
+ <location filename="../../src/courtroom.cpp" line="260"/>
<source>To front</source>
<translation>Вперёд</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="280"/>
+ <location filename="../../src/courtroom.cpp" line="261"/>
<source>To behind</source>
<translation>Ðазад</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="598"/>
+ <location filename="../../src/courtroom.cpp" line="604"/>
<source>Select a character you wish to pair with.</source>
<translation>Выберите перÑонажа, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ хотите вÑтать Ñ€Ñдом.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="603"/>
<source>Change the percentage offset of your character&apos;s position from the center of the screen.</source>
- <translation>Изменить процент Ñдвига вашего перÑонажа отноÑительно центра Ñкрана.</translation>
+ <translation type="vanished">Изменить процент Ñдвига вашего перÑонажа отноÑительно центра Ñкрана.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="609"/>
+ <location filename="../../src/courtroom.cpp" line="623"/>
<source>Change the order of appearance for your character.</source>
<translation>ПеремеÑтить вашего перÑонажа вперёд или назад отноÑительно партнёра.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="614"/>
+ <location filename="../../src/courtroom.cpp" line="628"/>
<source>Display the list of characters to pair with.</source>
<translation>Показать ÑпиÑок перÑонажей, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ можно вÑтать Ñ€Ñдом.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="672"/>
+ <location filename="../../src/courtroom.cpp" line="697"/>
<source>Oops, you&apos;re muted!</source>
<translation>О нет, Ð²Ð°Ñ Ð·Ð°Ð³Ð»ÑƒÑˆÐ¸Ð»Ð¸!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="686"/>
+ <location filename="../../src/courtroom.cpp" line="711"/>
<source>Set your character&apos;s emote to play on your next message.</source>
<translation>Выберите Ñмоцию Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ выводе вашего Ñледующего ÑообщениÑ.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="690"/>
+ <location filename="../../src/courtroom.cpp" line="715"/>
<source>Set your character&apos;s supplementary background.</source>
<translation>УÑтановить фон Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ перÑонажа.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="696"/>
<source>Set an &apos;iniswap&apos;, or an alternative character folder to refer to from your current character.
Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/&lt;charname&gt;/iniswaps.ini</source>
- <translation>Включить Ñ‚.н. подмену ini – альтернативную папку перÑонажа, к которой будет обращатьÑÑ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¹ перÑонаж.
+ <translation type="vanished">Включить Ñ‚.н. подмену ini – альтернативную папку перÑонажа, к которой будет обращатьÑÑ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¹ перÑонаж.
Введите Ð¸Ð¼Ñ Ð¿ÐµÑ€Ñонажа и нажмите Enter; нажмите [X], чтобы удалить.
Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑохранÑÑŽÑ‚ÑÑ Ð¿Ð¾ Ñледующему пути: base/characters/&lt;имÑ_перÑонажа&gt;/iniswaps.ini</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="705"/>
- <location filename="../../src/courtroom.cpp" line="722"/>
+ <location filename="../../src/courtroom.cpp" line="730"/>
<source>Remove the currently selected iniswap from the list and return to the original character folder.</source>
<translation>Удалить выбранного Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¼ÐµÐ½Ñ‹ ini перÑонажа и вернутьÑÑ Ðº папке изначально выбранного перÑонажа.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="713"/>
+ <location filename="../../src/courtroom.cpp" line="738"/>
<source>Set a sound effect to play on your next &apos;Preanim&apos;. Leaving it on Default will use the emote-defined sound (if any).
Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/&lt;charname&gt;/soundlist.ini</source>
<translation>Выберите звук, который нужно воÑпроизвеÑти Ñо Ñледующей пред. анимацией.
@@ -943,7 +1098,7 @@ Edit by typing and pressing Enter, [X] to remove. This saves to your base/charac
Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑохранÑÑŽÑ‚ÑÑ Ð¿Ð¾ Ñледующему пути: base/characters/&lt;имÑ_перÑонажа&gt;/soundlist.ini</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="729"/>
+ <location filename="../../src/courtroom.cpp" line="754"/>
<source>Choose an effect to play on your next spoken message.
The effects are defined in your theme/effects/effects.ini. Your character can define custom effects by
char.ini [Options] category, effects = &apos;miscname&apos; where it referes to misc/&lt;miscname&gt;/effects.ini to read the effects.</source>
@@ -952,73 +1107,73 @@ char.ini [Options] category, effects = &apos;miscname&apos; where it referes to
в категории [Options] файла char.ini, effects = &apos;название&apos;, что отÑылает к файлу misc/&lt;название&gt;/effects.ini.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="749"/>
+ <location filename="../../src/courtroom.cpp" line="774"/>
<source>Music</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="751"/>
+ <location filename="../../src/courtroom.cpp" line="776"/>
<source>Sfx</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="753"/>
+ <location filename="../../src/courtroom.cpp" line="778"/>
<source>Blips</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="798"/>
+ <location filename="../../src/courtroom.cpp" line="823"/>
<source>Change character</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="804"/>
+ <location filename="../../src/courtroom.cpp" line="829"/>
<source>Reload theme</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="810"/>
+ <location filename="../../src/courtroom.cpp" line="835"/>
<source>Call mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="816"/>
+ <location filename="../../src/courtroom.cpp" line="841"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="829"/>
+ <location filename="../../src/courtroom.cpp" line="854"/>
<source>A/M</source>
<translation>Л/М</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="834"/>
+ <location filename="../../src/courtroom.cpp" line="859"/>
<source>Preanim</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="921"/>
+ <location filename="../../src/courtroom.cpp" line="959"/>
<source>Return back to the server list.</source>
<translation>ВернутьÑÑ Ðº ÑпиÑку Ñерверов.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="934"/>
+ <location filename="../../src/courtroom.cpp" line="972"/>
<source>Become a spectator. You won&apos;t be able to interact with the in-character screen.</source>
<translation>Зайти в качеÑтве зрителÑ. Ð’Ñ‹ не Ñможете взаимодейÑтвовать Ñ Ð¸Ð³Ñ€Ð¾Ð²Ñ‹Ð¼ чатом.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="1527"/>
+ <location filename="../../src/courtroom.cpp" line="1615"/>
<source>You were granted the Disable Modcalls button.</source>
<translation>Вам дали кнопку Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° модератора.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="1527"/>
- <location filename="../../src/courtroom.cpp" line="3472"/>
+ <location filename="../../src/courtroom.cpp" line="1615"/>
+ <location filename="../../src/courtroom.cpp" line="4001"/>
<source>CLIENT</source>
<translation>КЛИЕÐТ</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3106"/>
+ <location filename="../../src/courtroom.cpp" line="3607"/>
<source>You have been banned.</source>
<translation>Ð’Ð°Ñ Ð·Ð°Ð±Ð°Ð½Ð¸Ð»Ð¸.</translation>
</message>
@@ -1027,7 +1182,7 @@ char.ini [Options] category, effects = &apos;miscname&apos; where it referes to
<translation type="obsolete">Теперь у Ð²Ð°Ñ ÐµÑть кнопка &quot;Охрана&quot;.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3309"/>
+ <location filename="../../src/courtroom.cpp" line="3814"/>
<source>You opened the settings menu.</source>
<translation>Вы открыли меню опций.</translation>
</message>
@@ -1040,161 +1195,180 @@ char.ini [Options] category, effects = &apos;miscname&apos; where it referes to
<translation type="obsolete"> (еÑли он выберет Ð²Ð°Ñ Ð² ответ).</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3330"/>
+ <location filename="../../src/courtroom.cpp" line="3835"/>
<source>You are no longer paired with anyone.</source>
<translation>Ð’Ñ‹ больше не Ñтоите Ñ€Ñдом ни Ñ ÐºÐµÐ¼.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3335"/>
+ <location filename="../../src/courtroom.cpp" line="3840"/>
<source>Are you sure you typed that well? The char ID could not be recognised.</source>
<translation>УбедитеÑÑŒ в правильноÑти введённой информации: перÑонаж Ñ Ñ‚Ð°ÐºÐ¸Ð¼ ID не найден.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3350"/>
<source>You have set your offset to </source>
- <translation>Ð’Ñ‹ уÑтановили Ñдвиг перÑонажа на </translation>
+ <translation type="vanished">Ð’Ñ‹ уÑтановили Ñдвиг перÑонажа на </translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3357"/>
+ <location filename="../../src/courtroom.cpp" line="3861"/>
<source>Your offset must be between -100% and 100%!</source>
<translation>Сдвиг перÑонажа должен быть между -100% и 100%!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3362"/>
+ <location filename="../../src/courtroom.cpp" line="3866"/>
<source>That offset does not look like one.</source>
<translation>Ðеверный Ñдвиг перÑонажа.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3368"/>
+ <location filename="../../src/courtroom.cpp" line="3879"/>
+ <source>You have set your vertical offset to %1%%.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3886"/>
+ <source>Your vertical offset must be between -100% and 100%!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3891"/>
+ <source>That vertical offset does not look like one.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3897"/>
<source>You switched your music and area list.</source>
<translation>Ð’Ñ‹ переключили ÑпиÑки локаций и музыки.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3375"/>
+ <location filename="../../src/courtroom.cpp" line="3904"/>
<source>You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this.</source>
<translation>Из-за того, что вы включили не поддерживаемые Ñервером возможноÑти, он может не принÑть ваши ÑообщениÑ.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3389"/>
+ <location filename="../../src/courtroom.cpp" line="3918"/>
<source>Your pre-animations interrupt again.</source>
<translation>ПерÑонаж будет говорить только поÑле предварительной анимации.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3392"/>
+ <location filename="../../src/courtroom.cpp" line="3921"/>
<source>Your pre-animations will not interrupt text.</source>
<translation>Предварительные анимации не будут прерывать вывод текÑта.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3403"/>
+ <location filename="../../src/courtroom.cpp" line="3932"/>
<source>Couldn&apos;t open chatlog.txt to write into.</source>
<translation>Ðевозможно открыть `chatlog.txt` Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3416"/>
+ <location filename="../../src/courtroom.cpp" line="3945"/>
<source>The IC chatlog has been saved.</source>
<translation>ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð¸Ð³Ñ€Ð¾Ð²Ð¾Ð³Ð¾ чата Ñохранена.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3429"/>
+ <location filename="../../src/courtroom.cpp" line="3958"/>
<source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely the case file you&apos;re looking for can&apos;t be found in there.</source>
<translation>Файл Ñ Ð´ÐµÐ»Ð¾Ð¼ не найден. ЕÑли найдёте, положите его в папку `base/cases/`, которую мы Ð´Ð»Ñ Ð²Ð°Ñ Ñоздали.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3456"/>
+ <location filename="../../src/courtroom.cpp" line="3985"/>
<source>Too many arguments to load a case! You only need one filename, without extension.</source>
<translation>Введите Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° без раÑширениÑ.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3496"/>
- <location filename="../../src/courtroom.cpp" line="3498"/>
- <location filename="../../src/evidence.cpp" line="762"/>
- <location filename="../../src/evidence.cpp" line="764"/>
+ <location filename="../../src/courtroom.cpp" line="4034"/>
+ <location filename="../../src/courtroom.cpp" line="4036"/>
+ <location filename="../../src/evidence.cpp" line="765"/>
+ <location filename="../../src/evidence.cpp" line="767"/>
<source>UNKNOWN</source>
<translation>н/д</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3518"/>
+ <location filename="../../src/courtroom.cpp" line="4056"/>
<source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely that you somehow deleted it.</source>
<translation>Папка `base/cases/` отÑутÑтвует.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3533"/>
+ <location filename="../../src/courtroom.cpp" line="4071"/>
<source>You need to give a filename to save (extension not needed) and the courtroom status!</source>
<translation>Введите Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° (без раÑширениÑ) и укажите ÑÑ‚Ð°Ñ‚ÑƒÑ Ð·Ð°Ð»Ð° Ñуда.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3543"/>
+ <location filename="../../src/courtroom.cpp" line="4081"/>
<source>Too many arguments to save a case! You only need a filename without extension and the courtroom status!</source>
<translation>УбедитеÑÑŒ, что Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° указано без раÑширениÑ.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3570"/>
+ <location filename="../../src/courtroom.cpp" line="4108"/>
<source>Succesfully saved, edit doc and cmdoc link on the ini!</source>
<translation>Сохранение прошло уÑпешно. СÑылки на документы можно редактировать в ini.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3597"/>
+ <location filename="../../src/courtroom.cpp" line="4135"/>
<source>Master</source>
<translation>МаÑтер</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4104"/>
+ <location filename="../../src/courtroom.cpp" line="4617"/>
+ <source>Stop Current Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="4618"/>
<source>Play Random Song</source>
<translation>Включить Ñлучайную композицию</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4107"/>
+ <location filename="../../src/courtroom.cpp" line="4620"/>
<source>Expand All Categories</source>
<translation>Развернуть вÑе категории</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4109"/>
+ <location filename="../../src/courtroom.cpp" line="4622"/>
<source>Collapse All Categories</source>
<translation>Свернуть вÑе категории</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4113"/>
+ <location filename="../../src/courtroom.cpp" line="4626"/>
<source>Fade Out Previous</source>
<translation>ПоÑтепенное затухание предыдущей композиции</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4119"/>
+ <location filename="../../src/courtroom.cpp" line="4632"/>
<source>Fade In</source>
<translation>ПоÑтепенное нараÑтание</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4125"/>
+ <location filename="../../src/courtroom.cpp" line="4638"/>
<source>Synchronize</source>
<translation>Синхронизировать</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4425"/>
+ <location filename="../../src/courtroom.cpp" line="4970"/>
<source>Default</source>
<translation>по умолчанию</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4594"/>
+ <location filename="../../src/courtroom.cpp" line="5153"/>
<source>Reason:</source>
<translation>Причина:</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4595"/>
+ <location filename="../../src/courtroom.cpp" line="5154"/>
<source>Call Moderator</source>
<translation>Вызов модератора</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4603"/>
- <location filename="../../src/courtroom.cpp" line="4607"/>
+ <location filename="../../src/courtroom.cpp" line="5162"/>
+ <location filename="../../src/courtroom.cpp" line="5166"/>
<source>Error</source>
<translation>Ошибка</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4603"/>
+ <location filename="../../src/courtroom.cpp" line="5162"/>
<source>You must provide a reason.</source>
<translation>Укажите причину.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4607"/>
+ <location filename="../../src/courtroom.cpp" line="5166"/>
<source>The message is too long.</source>
<translation>Слишком длинное Ñообщение.</translation>
</message>
@@ -1261,28 +1435,28 @@ You will be prompted if there&apos;s any unsaved changes.</source>
</message>
<message>
<location filename="../../src/evidence.cpp" line="158"/>
- <location filename="../../src/evidence.cpp" line="617"/>
+ <location filename="../../src/evidence.cpp" line="619"/>
<source>Transfer evidence to private inventory.</source>
<translation>ПеренеÑти улику в Ñвой ÑпиÑок.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="163"/>
- <location filename="../../src/evidence.cpp" line="627"/>
+ <location filename="../../src/evidence.cpp" line="629"/>
<source>Transfer evidence to global inventory.</source>
<translation>ПеренеÑти улику в общий ÑпиÑок.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="263"/>
+ <location filename="../../src/evidence.cpp" line="264"/>
<source>The piece of evidence you&apos;ve been editing has changed.</source>
<translation>Ð’ улику, которую вы редактировали, были внеÑены изменениÑ.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="264"/>
+ <location filename="../../src/evidence.cpp" line="265"/>
<source>Do you wish to keep your changes?</source>
<translation>Хотите Ñохранить внеÑённые изменениÑ?</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="265"/>
+ <location filename="../../src/evidence.cpp" line="266"/>
<source>Name: %1
Image: %2
Description:
@@ -1293,120 +1467,149 @@ Description:
%3</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="387"/>
+ <location filename="../../src/evidence.cpp" line="388"/>
<source>Images (*.png)</source>
<translation>Ð˜Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (*.png)</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="456"/>
- <location filename="../../src/evidence.cpp" line="460"/>
- <location filename="../../src/evidence.cpp" line="463"/>
+ <location filename="../../src/evidence.cpp" line="457"/>
+ <location filename="../../src/evidence.cpp" line="461"/>
+ <location filename="../../src/evidence.cpp" line="464"/>
<source>Double-click to edit...</source>
<translation>Редактирование по двойному клику...</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="478"/>
+ <location filename="../../src/evidence.cpp" line="479"/>
<source>Add new evidence...</source>
<translation>Добавить новую улику...</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="556"/>
+ <location filename="../../src/evidence.cpp" line="558"/>
<source>Evidence has been modified.</source>
<translation>Улика была изменена.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="557"/>
+ <location filename="../../src/evidence.cpp" line="559"/>
<source>Do you want to save your changes?</source>
<translation>Хотите Ñохранить внеÑённые изменениÑ?</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="619"/>
+ <location filename="../../src/evidence.cpp" line="621"/>
<source>Current evidence is global. Click to switch to private.</source>
<translation>Ð’Ñ‹ видите общий ÑпиÑок улик. Ðажмите здеÑÑŒ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра Ñвоих улик.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="629"/>
+ <location filename="../../src/evidence.cpp" line="631"/>
<source>Current evidence is private. Click to switch to global.</source>
<translation>Ð’Ñ‹ видите Ñвой ÑпиÑок улик. Ðажмите здеÑÑŒ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра общих улик.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="659"/>
+ <location filename="../../src/evidence.cpp" line="662"/>
<source>&quot;%1&quot; has been transferred.</source>
<translation>Улика &quot;%1&quot; была перенеÑена.</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="722"/>
+ <location filename="../../src/evidence.cpp" line="725"/>
<source>Save Inventory</source>
<translation>Сохранить ÑпиÑок улик</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="722"/>
- <location filename="../../src/evidence.cpp" line="748"/>
+ <location filename="../../src/evidence.cpp" line="725"/>
+ <location filename="../../src/evidence.cpp" line="751"/>
<source>Ini Files (*.ini)</source>
<translation>Файлы ini (*.ini)</translation>
</message>
<message>
- <location filename="../../src/evidence.cpp" line="748"/>
+ <location filename="../../src/evidence.cpp" line="751"/>
<source>Open Inventory</source>
<translation>Загрузить ÑпиÑок улик</translation>
</message>
</context>
<context>
+ <name>DemoServer</name>
+ <message>
+ <location filename="../../src/demoserver.cpp" line="38"/>
+ <location filename="../../src/demoserver.cpp" line="152"/>
+ <source>Load Demo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/demoserver.cpp" line="38"/>
+ <location filename="../../src/demoserver.cpp" line="152"/>
+ <source>Demo Files (*.demo)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Lobby</name>
<message>
- <location filename="../../src/lobby.cpp" line="12"/>
+ <location filename="../../src/lobby.cpp" line="15"/>
<source>Attorney Online 2</source>
<translation>Attorney Online 2</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="31"/>
+ <location filename="../../src/lobby.cpp" line="35"/>
<source>Search</source>
<translation>ПоиÑк</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="39"/>
+ <location filename="../../src/lobby.cpp" line="43"/>
<source>Name</source>
<translation>Ðикнейм</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="94"/>
+ <location filename="../../src/lobby.cpp" line="98"/>
<source>It doesn&apos;t look like your client is set up correctly.
Did you download all resources correctly from tiny.cc/getao, including the large &apos;base&apos; folder?</source>
<translation>КажетÑÑ, ваш клиент неправильно наÑтроен.
Ð’Ñ‹ точно Ñкачали вÑе реÑурÑÑ‹ отÑюда tiny.cc/getao, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¾Ð³Ñ€Ð¾Ð¼Ð½ÑƒÑŽ папку `base`?</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="123"/>
+ <location filename="../../src/lobby.cpp" line="127"/>
<source>Version: %1</source>
<translation>ВерÑиÑ: %1</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="129"/>
+ <location filename="../../src/lobby.cpp" line="133"/>
<source>Settings</source>
<translation>Опции</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="132"/>
+ <location filename="../../src/lobby.cpp" line="136"/>
<source>Allows you to change various aspects of the client.</source>
<translation>Изменить параметры работы программы.</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="176"/>
+ <location filename="../../src/lobby.cpp" line="180"/>
<source>Loading</source>
<translation>Загрузка</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="180"/>
+ <location filename="../../src/lobby.cpp" line="184"/>
<source>Cancel</source>
<translation>Отмена</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="365"/>
- <source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Client development:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;QA testing:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!&lt;p&gt;The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.&lt;p&gt;Running on Qt version %2 with the %3 audio engine.&lt;p&gt;Built on %4</source>
- <translation>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;СимулÑтор драмы в зале Ñуда&lt;p&gt;&lt;b&gt;ИÑходный код:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;ОÑÐ½Ð¾Ð²Ð½Ð°Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ°:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Разработка клиента:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;ТеÑтирование:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;БлагодарноÑти:&lt;/b&gt;&lt;br&gt;CrazyJC (директор по выпуÑку верÑии 2.8) и MaximumVolty (продвижение верÑии 2.8); Remy, Hibiki, court-records.net (Ñпрайты); Qubrick (webAO); Rue (вебÑайт); Draxirch (дизайн интерфейÑа); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, и FanatSors (AO1); держатели Ñерверов, ГМ, ПД, Ñоздатели контента, и вÑÑ‘ ÑообщеÑтво AO2!&lt;p&gt;Проект Ñетевой визуальной новеллы Attorney Online (c) 2016-2020 разработчики Attorney Online. ПрименÑетÑÑ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ Ð½Ð° открытое ПО. Ð’Ñе прочие файлы ÑвлÑÑŽÑ‚ÑÑ ÑобÑтвенноÑтью их владельцев.&lt;p&gt;Работает на Qt верÑии %2 Ñ Ð°ÑƒÐ´Ð¸Ð¾-движком %3.&lt;p&gt;Сборка от %4</translation>
+ <location filename="../../src/lobby.cpp" line="366"/>
+ <source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Client development:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;QA testing:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!&lt;p&gt;The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.&lt;p&gt;Running on Qt version %2 with the BASS audio engine.&lt;br&gt;APNG plugin loaded: %3&lt;p&gt;Built on %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="398"/>
+ <source>Yes</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/lobby.cpp" line="398"/>
+ <source>No</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Client development:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;QA testing:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!&lt;p&gt;The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.&lt;p&gt;Running on Qt version %2 with the %3 audio engine.&lt;p&gt;Built on %4</source>
+ <translation type="vanished">&lt;h2&gt;Attorney Online %1&lt;/h2&gt;СимулÑтор драмы в зале Ñуда&lt;p&gt;&lt;b&gt;ИÑходный код:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;ОÑÐ½Ð¾Ð²Ð½Ð°Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ°:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Разработка клиента:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;ТеÑтирование:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;БлагодарноÑти:&lt;/b&gt;&lt;br&gt;CrazyJC (директор по выпуÑку верÑии 2.8) и MaximumVolty (продвижение верÑии 2.8); Remy, Hibiki, court-records.net (Ñпрайты); Qubrick (webAO); Rue (вебÑайт); Draxirch (дизайн интерфейÑа); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, и FanatSors (AO1); держатели Ñерверов, ГМ, ПД, Ñоздатели контента, и вÑÑ‘ ÑообщеÑтво AO2!&lt;p&gt;Проект Ñетевой визуальной новеллы Attorney Online (c) 2016-2020 разработчики Attorney Online. ПрименÑетÑÑ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ Ð½Ð° открытое ПО. Ð’Ñе прочие файлы ÑвлÑÑŽÑ‚ÑÑ ÑобÑтвенноÑтью их владельцев.&lt;p&gt;Работает на Qt верÑии %2 Ñ Ð°ÑƒÐ´Ð¸Ð¾-движком %3.&lt;p&gt;Сборка от %4</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="400"/>
<source>About</source>
<translation>О программе</translation>
</message>
@@ -1415,13 +1618,13 @@ Did you download all resources correctly from tiny.cc/getao, including the large
<translation type="obsolete">&lt;h2&gt;Attorney Online %1&lt;/h2&gt;СимулÑтор Ñудебной драмы&lt;p&gt;&lt;b&gt;ИÑходный код:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;ОÑновной разработкой занималиÑÑŒ:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;ОÑÐ¾Ð±ÐµÐ½Ð½Ð°Ñ Ð±Ð»Ð°Ð³Ð¾Ð´Ð°Ñ€Ð½Ð¾Ñть:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (дизайн интерфейÑа), Draxirch (дизайн интерфейÑа), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="540"/>
+ <location filename="../../src/lobby.cpp" line="551"/>
<source>Online: %1/%2</source>
<translation>Онлайн: %1/%2</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="142"/>
- <location filename="../../src/lobby.cpp" line="436"/>
+ <location filename="../../src/lobby.cpp" line="146"/>
+ <location filename="../../src/lobby.cpp" line="438"/>
<source>Offline</source>
<translation>Ðе в Ñети</translation>
</message>
@@ -1436,25 +1639,24 @@ Did you download all resources correctly from tiny.cc/getao, including the large
<translation>н/д</translation>
</message>
<message>
- <location filename="../../src/chatlogpiece.cpp" line="61"/>
<source> has played a song: </source>
- <translation> включил(а) композицию: </translation>
+ <translation type="vanished"> включил(а) композицию: </translation>
</message>
</context>
<context>
<name>debug_functions</name>
<message>
- <location filename="../../src/debug_functions.cpp" line="10"/>
+ <location filename="../../src/debug_functions.cpp" line="13"/>
<source>Error: %1</source>
<translation>Ошибка: %1</translation>
</message>
<message>
- <location filename="../../src/debug_functions.cpp" line="13"/>
+ <location filename="../../src/debug_functions.cpp" line="16"/>
<source>Error</source>
<translation>Ошибка</translation>
</message>
<message>
- <location filename="../../src/debug_functions.cpp" line="25"/>
+ <location filename="../../src/debug_functions.cpp" line="29"/>
<source>Notice</source>
<translation>Уведомление</translation>
</message>
diff --git a/src/aoapplication.cpp b/src/aoapplication.cpp
index fa58ab84..34afb28e 100644
--- a/src/aoapplication.cpp
+++ b/src/aoapplication.cpp
@@ -45,6 +45,10 @@ void AOApplication::construct_lobby()
if (is_discord_enabled())
discord->state_lobby();
+ if (demo_server)
+ demo_server->deleteLater();
+ demo_server = new DemoServer();
+
w_lobby->show();
}
@@ -182,6 +186,10 @@ void AOApplication::call_announce_menu(Courtroom *court)
void CALLBACK AOApplication::BASSreset(HSTREAM handle, DWORD channel,
DWORD data, void *user)
{
+ UNUSED(handle);
+ UNUSED(channel);
+ UNUSED(data);
+ UNUSED(user);
doBASSreset();
}
diff --git a/src/aocharmovie.cpp b/src/aocharmovie.cpp
deleted file mode 100644
index 09a4b889..00000000
--- a/src/aocharmovie.cpp
+++ /dev/null
@@ -1,332 +0,0 @@
-#include "aocharmovie.h"
-
-#include "aoapplication.h"
-#include "file_functions.h"
-#include "misc_functions.h"
-
-AOCharMovie::AOCharMovie(QWidget *p_parent, AOApplication *p_ao_app)
- : QLabel(p_parent)
-{
- ao_app = p_ao_app;
- preanim_timer = new QTimer(this);
- preanim_timer->setSingleShot(true);
-
- ticker = new QTimer(this);
- ticker->setTimerType(Qt::PreciseTimer);
- ticker->setSingleShot(false);
- connect(ticker, SIGNAL(timeout()), this, SLOT(movie_ticker()));
-
- // connect(m_movie, SIGNAL(frameChanged(int)), this,
- // SLOT(frame_change(int)));
- connect(preanim_timer, SIGNAL(timeout()), this, SLOT(preanim_done()));
-}
-
-void AOCharMovie::load_image(QString p_char, QString p_emote,
- QString emote_prefix)
-{
-#ifdef DEBUG_CHARMOVIE
- actual_time.restart();
-#endif
- QString emote_path;
- QList<QString> pathlist;
- pathlist = {
- ao_app->get_image_suffix(ao_app->get_character_path(
- p_char, emote_prefix + p_emote)), // Default path
- ao_app->get_image_suffix(ao_app->get_character_path(
- p_char, emote_prefix + "/" +
- p_emote)), // Path check if it's categorized into a folder
- ao_app->get_image_suffix(ao_app->get_character_path(
- p_char, p_emote)), // Just use the non-prefixed image, animated or not
- ao_app->get_image_suffix(
- ao_app->get_theme_path("placeholder")), // Theme placeholder path
- ao_app->get_image_suffix(ao_app->get_default_theme_path(
- "placeholder")), // Default theme placeholder path
- };
-
- for (QString path : pathlist) {
- if (file_exists(path)) {
- emote_path = path;
- break;
- }
- }
-
- this->clear();
- ticker->stop();
- preanim_timer->stop();
- movie_frames.clear();
- movie_delays.clear();
- movie_effects.clear();
-
- if (!file_exists(emote_path))
- return;
-
- m_reader->setFileName(emote_path);
-
- // set format to apng if png supports animation
- if (emote_path.endsWith("png")) {
- m_reader->setFormat("apng");
- if (!m_reader->supportsAnimation()) {
- m_reader->setFormat("png");
- }
- }
-
- QPixmap f_pixmap = this->get_pixmap(m_reader->read());
- int f_delay = m_reader->nextImageDelay();
-
- frame = 0;
- max_frames = m_reader->imageCount();
-
- this->set_frame(f_pixmap);
- this->show();
- if (max_frames > 1) {
- movie_frames.append(f_pixmap);
- movie_delays.append(f_delay);
- }
-
- m_char = p_char;
- m_emote = emote_prefix + p_emote;
-
- if (network_strings.size() > 0) // our FX overwritten by networked ones
- this->load_network_effects();
- else // Use default ini FX
- this->load_effects();
-#ifdef DEBUG_CHARMOVIE
- qDebug() << max_frames << "Setting image to " << emote_path
- << "Time taken to process image:" << actual_time.elapsed();
-
- actual_time.restart();
-#endif
-}
-
-void AOCharMovie::load_effects()
-{
- movie_effects.clear();
- movie_effects.resize(max_frames);
- for (int e_frame = 0; e_frame < max_frames; ++e_frame) {
- QString effect = ao_app->get_screenshake_frame(m_char, m_emote, e_frame);
- if (effect != "") {
- movie_effects[e_frame].append("shake");
- }
-
- effect = ao_app->get_flash_frame(m_char, m_emote, e_frame);
- if (effect != "") {
- movie_effects[e_frame].append("flash");
- }
-
- effect = ao_app->get_sfx_frame(m_char, m_emote, e_frame);
- if (effect != "") {
- movie_effects[e_frame].append("sfx^" + effect);
- }
- }
-}
-
-void AOCharMovie::load_network_effects()
-{
- movie_effects.clear();
- movie_effects.resize(max_frames);
- // Order is important!!!
- QStringList effects_list = {"shake", "flash", "sfx^"};
-
- // Determines which list is smaller - effects_list or network_strings - and
- // uses it as basis for the loop. This way, incomplete network_strings would
- // still be parsed, and excess/unaccounted for networked information is
- // omitted.
- int effects_size = qMin(effects_list.size(), network_strings.size());
-
- for (int i = 0; i < effects_size; ++i) {
- QString netstring = network_strings.at(i);
- QStringList emote_splits = netstring.split("^");
- foreach (QString emote, emote_splits) {
- QStringList parsed = emote.split("|");
- if (parsed.size() <= 0 || parsed.at(0) != m_emote)
- continue;
- foreach (QString frame_data, parsed) {
- QStringList frame_split = frame_data.split("=");
- if (frame_split.size() <=
- 1) // We might still be hanging at the emote itself (entry 0).
- continue;
- int f_frame = frame_split.at(0).toInt();
- if (f_frame >= max_frames) {
- qDebug() << "Warning: out of bounds" << effects_list[i] << "frame"
- << f_frame << "out of" << max_frames << "for" << m_char
- << m_emote;
- continue;
- }
- QString f_data = frame_split.at(1);
- if (f_data != "") {
- QString effect = effects_list[i];
- if (effect == "sfx^") // Currently the only frame result that feeds us
- // data, let's yank it in.
- effect += f_data;
- qDebug() << effect << f_data << "frame" << f_frame << "for" << m_char
- << m_emote;
- movie_effects[f_frame].append(effect);
- }
- }
- }
- }
-}
-
-void AOCharMovie::play()
-{
- play_frame_effect(frame);
- if (max_frames <= 1) {
- if (play_once)
- ticker->start(60);
- }
- else
- ticker->start(this->get_frame_delay(movie_delays[frame]));
-}
-
-void AOCharMovie::play_pre(QString p_char, QString p_emote, int duration)
-{
- load_image(p_char, p_emote, "");
- // As much as I'd like to screw around with [Time] durations modifying the
- // animation speed, I don't think I can reliably do that, not without looping
- // through all frames in the image at least - which causes lag. So for now it
- // simply ends the preanimation early instead.
- play_once = true;
- if (duration >
- 0) // It's -1 if there's no definition in [Time] for it. In which case, it
- // will let the animation run out in full. Duration 0 does the same.
- preanim_timer->start(duration *
- time_mod); // This timer will not fire if the animation
- // finishes earlier than that
- play();
-}
-
-void AOCharMovie::play_talking(QString p_char, QString p_emote)
-{
- play_once = false;
- load_image(p_char, p_emote, "(b)");
- play();
-}
-
-void AOCharMovie::play_idle(QString p_char, QString p_emote)
-{
- play_once = false;
- load_image(p_char, p_emote, "(a)");
- play();
-}
-
-void AOCharMovie::play_frame_effect(int frame)
-{
- if (frame < max_frames) {
- foreach (QString effect, movie_effects[frame]) {
- if (effect == "shake") {
- shake();
-#ifdef DEBUG_CHARMOVIE
- qDebug() << "Attempting to play shake on frame" << frame;
-#endif
- }
-
- if (effect == "flash") {
- flash();
-#ifdef DEBUG_CHARMOVIE
- qDebug() << "Attempting to play flash on frame" << frame;
-#endif
- }
-
- if (effect.startsWith("sfx^")) {
- QString sfx = effect.section("^", 1);
- play_sfx(sfx);
-#ifdef DEBUG_CHARMOVIE
- qDebug() << "Attempting to play sfx" << sfx << "on frame" << frame;
-#endif
- }
- }
- }
-}
-
-void AOCharMovie::stop()
-{
- // for all intents and purposes, stopping is the same as hiding. at no point
- // do we want a frozen gif to display
- ticker->stop();
- preanim_timer->stop();
- this->hide();
-}
-
-QPixmap AOCharMovie::get_pixmap(QImage image)
-{
- QPixmap f_pixmap;
- if (m_flipped)
- f_pixmap = QPixmap::fromImage(image.mirrored(true, false));
- else
- f_pixmap = QPixmap::fromImage(image);
- // auto aspect_ratio = Qt::KeepAspectRatio;
- auto transform_mode = Qt::FastTransformation;
- if (f_pixmap.height() > f_h) // We are downscaling, use anti-aliasing.
- transform_mode = Qt::SmoothTransformation;
-
- f_pixmap = f_pixmap.scaledToHeight(f_h, transform_mode);
- this->resize(f_pixmap.size());
-
- return f_pixmap;
-}
-
-void AOCharMovie::set_frame(QPixmap f_pixmap)
-{
- this->setPixmap(f_pixmap);
- QLabel::move(
- x + (f_w - f_pixmap.width()) / 2,
- y + (f_h - f_pixmap.height())); // Always center horizontally, always put
- // at the bottom vertically
-}
-
-void AOCharMovie::combo_resize(int w, int h)
-{
- QSize f_size(w, h);
- f_w = w;
- f_h = h;
- this->resize(f_size);
-}
-
-int AOCharMovie::get_frame_delay(int delay)
-{
- return static_cast<int>(double(delay) * double(speed / 100));
-}
-
-void AOCharMovie::move(int ax, int ay)
-{
- x = ax;
- y = ay;
- QLabel::move(x, y);
-}
-
-void AOCharMovie::movie_ticker()
-{
- ++frame;
- if (frame >= max_frames) {
- if (play_once) {
- preanim_done();
- return;
- }
- else
- frame = 0;
- }
- // qint64 difference = elapsed - movie_delays[frame];
- if (frame >= movie_frames.size()) {
- m_reader->jumpToImage(frame);
- movie_frames.resize(frame + 1);
- movie_frames[frame] = this->get_pixmap(m_reader->read());
- movie_delays.resize(frame + 1);
- movie_delays[frame] = m_reader->nextImageDelay();
- }
-
-#ifdef DEBUG_CHARMOVIE
- qDebug() << frame << movie_delays[frame]
- << "actual time taken from last frame:" << actual_time.restart();
-#endif
-
- this->set_frame(movie_frames[frame]);
- play_frame_effect(frame);
- ticker->setInterval(this->get_frame_delay(movie_delays[frame]));
-}
-
-void AOCharMovie::preanim_done()
-{
- ticker->stop();
- preanim_timer->stop();
- done();
-}
diff --git a/src/aoevidencedisplay.cpp b/src/aoevidencedisplay.cpp
index 2ffea2c9..f6dffd85 100644
--- a/src/aoevidencedisplay.cpp
+++ b/src/aoevidencedisplay.cpp
@@ -11,7 +11,7 @@ AOEvidenceDisplay::AOEvidenceDisplay(QWidget *p_parent, AOApplication *p_ao_app)
evidence_icon = new QLabel(this);
sfx_player = new AOSfxPlayer(this, ao_app);
- evidence_movie = new AOMovie(this, ao_app);
+ evidence_movie = new InterfaceLayer(this, ao_app);
connect(evidence_movie, SIGNAL(done()), this, SLOT(show_done()));
}
@@ -46,9 +46,11 @@ void AOEvidenceDisplay::show_evidence(QString p_evidence_image,
evidence_icon->setPixmap(f_pixmap);
evidence_icon->resize(f_pixmap.size());
evidence_icon->move(icon_dimensions.x, icon_dimensions.y);
-
- evidence_movie->play(gif_name);
- sfx_player->play(ao_app->get_sfx("evidence_present"));
+ evidence_movie->static_duration = 320;
+ evidence_movie->max_duration = 1000;
+ evidence_movie->set_play_once(true);
+ evidence_movie->load_image(gif_name, "");
+ sfx_player->play(ao_app->get_sfx("evidence_present", "default"));
}
void AOEvidenceDisplay::reset()
diff --git a/src/aolayer.cpp b/src/aolayer.cpp
new file mode 100644
index 00000000..f95773b0
--- /dev/null
+++ b/src/aolayer.cpp
@@ -0,0 +1,601 @@
+#include "aolayer.h"
+
+#include "aoapplication.h"
+#include "file_functions.h"
+#include "misc_functions.h"
+
+AOLayer::AOLayer(QWidget *p_parent, AOApplication *p_ao_app) : QLabel(p_parent)
+{
+ ao_app = p_ao_app;
+
+ // used for culling images when their max_duration is exceeded
+ shfx_timer = new QTimer(this);
+ shfx_timer->setTimerType(Qt::PreciseTimer);
+ shfx_timer->setSingleShot(true);
+ connect(shfx_timer, SIGNAL(timeout()), this, SLOT(shfx_timer_done()));
+
+ ticker = new QTimer(this);
+ ticker->setTimerType(Qt::PreciseTimer);
+ ticker->setSingleShot(false);
+ connect(ticker, SIGNAL(timeout()), this, SLOT(movie_ticker()));
+
+ preanim_timer = new QTimer(this);
+ preanim_timer->setSingleShot(true);
+ connect(preanim_timer, SIGNAL(timeout()), this, SLOT(preanim_done()));
+}
+
+BackgroundLayer::BackgroundLayer(QWidget *p_parent, AOApplication *p_ao_app)
+ : AOLayer(p_parent, p_ao_app)
+{
+}
+ForegroundLayer::ForegroundLayer(QWidget *p_parent, AOApplication *p_ao_app)
+ : AOLayer(p_parent, p_ao_app)
+{
+}
+CharLayer::CharLayer(QWidget *p_parent, AOApplication *p_ao_app)
+ : AOLayer(p_parent, p_ao_app)
+{
+}
+EffectLayer::EffectLayer(QWidget *p_parent, AOApplication *p_ao_app)
+ : AOLayer(p_parent, p_ao_app)
+{
+}
+InterjectionLayer::InterjectionLayer(QWidget *p_parent, AOApplication *p_ao_app)
+ : AOLayer(p_parent, p_ao_app)
+{
+}
+InterfaceLayer::InterfaceLayer(QWidget *p_parent, AOApplication *p_ao_app)
+ : AOLayer(p_parent, p_ao_app)
+{
+}
+
+StickerLayer::StickerLayer(QWidget *p_parent, AOApplication *p_ao_app)
+ : AOLayer(p_parent, p_ao_app)
+{
+}
+
+QString AOLayer::find_image(QList<QString> p_list)
+{
+ QString image_path;
+ for (QString path : p_list) {
+#ifdef DEBUG_MOVIE
+ qDebug() << "checking path " << path;
+#endif
+ if (file_exists(path)) {
+ image_path = path;
+#ifdef DEBUG_MOVIE
+ qDebug() << "found path " << path;
+#endif
+ break;
+ }
+ }
+ return image_path;
+}
+
+QPixmap AOLayer::get_pixmap(QImage image)
+{
+ QPixmap f_pixmap;
+ if (m_flipped)
+ f_pixmap = QPixmap::fromImage(image.mirrored(true, false));
+ else
+ f_pixmap = QPixmap::fromImage(image);
+ // auto aspect_ratio = Qt::KeepAspectRatio;
+ if (f_pixmap.height() > f_h) // We are downscaling, use anti-aliasing.
+ transform_mode = Qt::SmoothTransformation;
+ if (stretch)
+ f_pixmap = f_pixmap.scaled(f_w, f_h);
+ else
+ f_pixmap = f_pixmap.scaledToHeight(f_h, transform_mode);
+ this->resize(f_pixmap.size());
+
+ return f_pixmap;
+}
+
+void AOLayer::set_frame(QPixmap f_pixmap)
+{
+ this->setPixmap(f_pixmap);
+ QLabel::move(
+ x + (f_w - f_pixmap.width()) / 2,
+ y + (f_h - f_pixmap.height())); // Always center horizontally, always put
+ // at the bottom vertically
+ this->setMask(
+ QRegion((f_pixmap.width() - f_w) / 2, (f_pixmap.height() - f_h) / 2, f_w,
+ f_h)); // make sure we don't escape the area we've been given
+}
+
+void AOLayer::combo_resize(int w, int h)
+{
+ QSize f_size(w, h);
+ f_w = w;
+ f_h = h;
+ this->resize(f_size);
+}
+
+int AOLayer::get_frame_delay(int delay)
+{
+ return static_cast<int>(double(delay) * double(speed / 100));
+}
+
+void AOLayer::move(int ax, int ay)
+{
+ x = ax;
+ y = ay;
+ QLabel::move(x, y);
+}
+
+void BackgroundLayer::load_image(QString p_filename)
+{
+ play_once = false;
+ cull_image = false;
+ QString design_path = ao_app->get_background_path("design.ini");
+ transform_mode =
+ ao_app->get_scaling(ao_app->read_design_ini("scaling", design_path));
+ stretch = ao_app->read_design_ini("stretch", design_path).startsWith("true");
+ qDebug() << "[BackgroundLayer] BG loaded: " << p_filename;
+ start_playback(ao_app->get_image_suffix(ao_app->get_background_path(p_filename)));
+}
+
+void ForegroundLayer::load_image(QString p_filename, QString p_charname)
+{
+ play_once = false;
+ cull_image = false;
+ miscname = ao_app->get_char_shouts(p_charname);
+ qDebug() << "[ForegroundLayer] FG loaded: " << p_filename;
+ QList<QString> pathlist = {
+ ao_app->get_image_suffix(ao_app->get_character_path(
+ p_charname, p_filename)), // first check the character folder
+ ao_app->get_image_suffix(ao_app->get_theme_path(
+ "misc/" + miscname + "/" +
+ p_filename)), // then check our theme's misc directory
+ ao_app->get_image_suffix(ao_app->get_misc_path(
+ miscname, p_filename)), // then check our global misc folder
+ ao_app->get_image_suffix(
+ ao_app->get_theme_path(p_filename)), // then check the user's theme
+ ao_app->get_image_suffix(ao_app->get_default_theme_path(
+ p_filename))}; // and finally check the default theme
+ start_playback(find_image(pathlist));
+}
+
+void CharLayer::load_image(QString p_filename, QString p_charname,
+ int p_duration, bool p_is_preanim)
+{
+ duration = p_duration;
+ cull_image = false;
+ force_continuous = false;
+ transform_mode = ao_app->get_scaling(
+ ao_app->get_emote_property(p_charname, p_filename, "scaling"));
+ stretch = ao_app->get_emote_property(p_charname, p_filename, "stretch")
+ .startsWith(true);
+ if ((p_charname == last_char) &&
+ ((p_filename == last_emote) ||
+ (p_filename.mid(3, -1) == last_emote.mid(3, -1))) &&
+ (!is_preanim) && (!was_preanim)) {
+ continuous = true;
+ force_continuous = true;
+ }
+ else {
+ continuous = false;
+ force_continuous = true;
+ }
+ prefix = "";
+ current_emote = p_filename;
+ was_preanim = is_preanim;
+ m_char = p_charname;
+ m_emote = current_emote;
+ last_char = p_charname;
+ last_emote = current_emote;
+ last_prefix = prefix;
+ is_preanim = p_is_preanim;
+ if ((p_filename.left(3) == "(a)") || (p_filename.left(3) == "(b)")) {
+ prefix = p_filename.left(3);
+ current_emote = p_filename.mid(3, -1);
+ }
+ else if ((duration > 0) || (p_filename.left(3) == "(c)")) {
+ if (p_filename.left(3) == "(c)") {
+ prefix = "(c)";
+ current_emote = p_filename.mid(3, -1);
+ }
+ is_preanim = true;
+ play_once = true;
+ preanim_timer->start(duration * tick_ms);
+ }
+ qDebug() << "[CharLayer] anim loaded: prefix " << prefix << " filename "
+ << current_emote << " from character: " << p_charname
+ << " continuous: " << continuous;
+ QList<QString> pathlist = {
+ ao_app->get_image_suffix(ao_app->get_character_path(
+ p_charname, prefix + current_emote)), // Default path
+ ao_app->get_image_suffix(ao_app->get_character_path(
+ p_charname,
+ prefix + "/" + current_emote)), // Path check if it's categorized
+ // into a folder
+ ao_app->get_image_suffix(ao_app->get_character_path(
+ p_charname,
+ current_emote)), // Just use the non-prefixed image, animated or not
+ ao_app->get_image_suffix(
+ ao_app->get_theme_path("placeholder")), // Theme placeholder path
+ ao_app->get_image_suffix(ao_app->get_default_theme_path(
+ "placeholder"))}; // Default theme placeholder path
+ this->start_playback(find_image(pathlist));
+}
+
+void InterjectionLayer::load_image(QString p_filename, QString p_charname,
+ QString p_miscname)
+{
+ continuous = false;
+ force_continuous = true;
+ play_once = true;
+ transform_mode = ao_app->get_misc_scaling(p_miscname);
+ QList<QString> pathlist = {
+ ao_app->get_image_suffix(ao_app->get_character_path(
+ p_charname, p_filename)), // Character folder
+ ao_app->get_image_suffix(ao_app->get_theme_path(
+ "misc/" + p_miscname + "/" + p_filename)), // Theme misc path
+ ao_app->get_image_suffix(
+ ao_app->get_misc_path(p_miscname, p_filename)), // Misc path
+ ao_app->get_image_suffix(
+ ao_app->get_theme_path(p_filename)), // Theme path
+ ao_app->get_image_suffix(
+ ao_app->get_default_theme_path(p_filename)), // Default theme path
+ ao_app->get_image_suffix(
+ ao_app->get_theme_path("placeholder")), // Placeholder path
+ ao_app->get_image_suffix(ao_app->get_default_theme_path(
+ "placeholder")), // Default placeholder path
+ };
+ QString final_image = find_image(pathlist);
+ if (final_image == ao_app->get_theme_path("custom.png") ||
+ final_image == ao_app->get_default_theme_path("custom.png") ||
+ final_image == ao_app->get_theme_path("witnesstestimony.png") ||
+ final_image == ao_app->get_default_theme_path("witnesstestimony.png") ||
+ final_image == ao_app->get_theme_path("crossexamination.png") ||
+ final_image == ao_app->get_default_theme_path("crossexamination.png"))
+ // stupid exceptions because themes are stupid
+ final_image = find_image(
+ {ao_app->get_image_suffix(ao_app->get_theme_path("placeholder")),
+ ao_app->get_image_suffix(ao_app->get_default_theme_path("placeholder"))});
+ start_playback(final_image);
+}
+
+void EffectLayer::load_image(QString p_filename, bool p_looping)
+{
+ if (p_looping)
+ play_once = false;
+ else
+ play_once = true;
+ continuous = false;
+ force_continuous = true;
+ start_playback(p_filename); // handled in its own file before we see it
+}
+
+void InterfaceLayer::load_image(QString p_filename, QString p_miscname)
+{
+ transform_mode = ao_app->get_misc_scaling(p_miscname);
+ QList<QString> pathlist = {
+ ao_app->get_image_suffix(ao_app->get_theme_path(
+ "misc/" + p_miscname + "/" +
+ p_filename)), // first check our theme's misc directory
+ ao_app->get_image_suffix(ao_app->get_misc_path(
+ p_miscname, p_filename)), // then check our global misc folder
+ ao_app->get_image_suffix(ao_app->get_theme_path(
+ p_filename)), // then check the user's theme for a default image
+ ao_app->get_image_suffix(ao_app->get_default_theme_path(
+ p_filename))}; // and finally check the default theme
+ start_playback(find_image(pathlist));
+}
+
+void StickerLayer::load_image(QString p_charname)
+{
+ QString miscname = ao_app->get_char_shouts(p_charname);
+ transform_mode = ao_app->get_misc_scaling(miscname);
+ QList<QString> pathlist = {
+ ao_app->get_image_suffix(ao_app->get_base_path() + "misc/" +
+ miscname + "/sticker/" + p_charname), // Misc path
+ ao_app->get_image_suffix(ao_app->get_custom_theme_path(miscname, "sticker/" + p_charname)), // Custom theme path
+ ao_app->get_image_suffix(ao_app->get_theme_path("sticker/" + p_charname)), // Theme path
+ ao_app->get_image_suffix(
+ ao_app->get_default_theme_path("sticker/" + p_charname)), // Default theme path
+ ao_app->get_image_suffix(
+ ao_app->get_character_path(p_charname, "sticker")), // Character folder
+ ao_app->get_image_suffix(
+ ao_app->get_character_path(p_charname, "showname")), // Scuffed DRO way
+ };
+ start_playback(find_image(pathlist));
+}
+
+void CharLayer::start_playback(QString p_image)
+{
+ movie_effects.clear();
+ AOLayer::start_playback(p_image);
+ if (network_strings.size() > 0) // our FX overwritten by networked ones
+ load_network_effects();
+ else // Use default ini FX
+ load_effects();
+}
+
+void AOLayer::start_playback(QString p_image)
+{
+#ifdef DEBUG_MOVIE
+ actual_time.restart();
+#endif
+ this->clear();
+ freeze();
+ movie_frames.clear();
+ movie_delays.clear();
+
+ if (!file_exists(p_image))
+ return;
+
+ QString scaling_override =
+ ao_app->read_design_ini("scaling", p_image + ".ini");
+ if (scaling_override != "")
+ transform_mode = ao_app->get_scaling(scaling_override);
+ QString stretch_override =
+ ao_app->read_design_ini("stretch", p_image + ".ini");
+ if (stretch_override != "")
+ stretch = stretch_override.startsWith("true");
+
+ qDebug() << "stretch:" << stretch << "filename:" << p_image;
+ m_reader.setFileName(p_image);
+ if (m_reader.loopCount() == 0)
+ play_once = true;
+ if ((last_path == p_image) && (!force_continuous))
+ continuous = true;
+ else if ((last_path != p_image) && !force_continuous)
+ continuous = false;
+ if (!continuous)
+ frame = 0;
+ force_continuous = false;
+ last_max_frames = max_frames;
+ max_frames = m_reader.imageCount();
+ if (((continuous) && (max_frames != last_max_frames)) || max_frames == 0) {
+ frame = 0;
+ continuous = false;
+ }
+ // CANTFIX: this causes a slight hitch
+ // The correct way of doing this would be to use QImageReader::jumpToImage()
+ // and populate missing data in the movie ticker when it's needed. This is
+ // unforunately completely impossible, because QImageReader::jumpToImage() is
+ // not implemented in any image format AO2 is equipped to use. Instead, the
+ // default behavior is used - that is, absolutely nothing.
+ if (continuous) {
+ for (int i = frame; i--;) {
+ if (i <= -1)
+ break;
+ QPixmap l_pixmap = this->get_pixmap(m_reader.read());
+ int l_delay = m_reader.nextImageDelay();
+ movie_frames.append(l_pixmap);
+ movie_delays.append(l_delay);
+ // qDebug() << "appending delay of " << l_delay;
+ }
+ }
+ // qDebug() << "CONT: " << continuous << " MAX: " << max_frames
+ // << " LAST MAX: " << last_max_frames << " FRAME: " << frame;
+ QPixmap f_pixmap = this->get_pixmap(m_reader.read());
+ int f_delay = m_reader.nextImageDelay();
+
+ this->set_frame(f_pixmap);
+ this->show();
+ if (max_frames > 1) {
+ movie_frames.append(f_pixmap);
+ movie_delays.append(f_delay);
+ }
+ else if (max_frames <= 1) {
+ duration = static_duration;
+ play_once = false;
+#ifdef DEBUG_MOVIE
+ qDebug() << "max_frames is <= 1, using static duration";
+#endif
+ }
+ if (duration > 0 && cull_image == true)
+ shfx_timer->start(duration);
+ play();
+#ifdef DEBUG_MOVIE
+ qDebug() << max_frames << "Setting image to " << image_path
+ << "Time taken to process image:" << actual_time.elapsed();
+
+ actual_time.restart();
+#endif
+}
+
+void CharLayer::play()
+{
+ play_frame_effect(frame);
+ AOLayer::play();
+}
+
+void AOLayer::play()
+{
+ if (max_frames <= 1) {
+ if (play_once)
+ ticker->start(tick_ms);
+ else
+ this->freeze();
+ }
+ else
+ ticker->start(this->get_frame_delay(movie_delays[frame]));
+}
+
+void AOLayer::set_play_once(bool p_play_once) { play_once = p_play_once; }
+void AOLayer::set_cull_image(bool p_cull_image) { cull_image = p_cull_image; }
+void AOLayer::set_static_duration(int p_static_duration)
+{
+ static_duration = p_static_duration;
+}
+void AOLayer::set_max_duration(int p_max_duration)
+{
+ max_duration = p_max_duration;
+}
+
+void CharLayer::load_effects()
+{
+ movie_effects.clear();
+ movie_effects.resize(max_frames);
+ for (int e_frame = 0; e_frame < max_frames; ++e_frame) {
+ QString effect = ao_app->get_screenshake_frame(m_char, m_emote, e_frame);
+ if (effect != "") {
+ movie_effects[e_frame].append("shake");
+ }
+
+ effect = ao_app->get_flash_frame(m_char, m_emote, e_frame);
+ if (effect != "") {
+ movie_effects[e_frame].append("flash");
+ }
+
+ effect = ao_app->get_sfx_frame(m_char, m_emote, e_frame);
+ if (effect != "") {
+ movie_effects[e_frame].append("sfx^" + effect);
+ }
+ }
+}
+
+void CharLayer::load_network_effects()
+{
+ movie_effects.clear();
+ movie_effects.resize(max_frames);
+ // Order is important!!!
+ QStringList effects_list = {"shake", "flash", "sfx^"};
+
+ // Determines which list is smaller - effects_list or network_strings - and
+ // uses it as basis for the loop. This way, incomplete network_strings would
+ // still be parsed, and excess/unaccounted for networked information is
+ // omitted.
+ int effects_size = qMin(effects_list.size(), network_strings.size());
+
+ for (int i = 0; i < effects_size; ++i) {
+ QString netstring = network_strings.at(i);
+ QStringList emote_splits = netstring.split("^");
+ for (const QString &emote : emote_splits) {
+ QStringList parsed = emote.split("|");
+ if (parsed.size() <= 0 || parsed.at(0) != m_emote)
+ continue;
+ foreach (QString frame_data, parsed) {
+ QStringList frame_split = frame_data.split("=");
+ if (frame_split.size() <=
+ 1) // We might still be hanging at the emote itself (entry 0).
+ continue;
+ int f_frame = frame_split.at(0).toInt();
+ if (f_frame >= max_frames || f_frame < 0) {
+ qDebug() << "Warning: out of bounds" << effects_list[i] << "frame"
+ << f_frame << "out of" << max_frames << "for" << m_emote;
+ continue;
+ }
+ QString f_data = frame_split.at(1);
+ if (f_data != "") {
+ QString effect = effects_list[i];
+ if (effect == "sfx^") // Currently the only frame result that feeds us
+ // data, let's yank it in.
+ effect += f_data;
+ qDebug() << effect << f_data << "frame" << f_frame << "for"
+ << m_emote;
+ movie_effects[f_frame].append(effect);
+ }
+ }
+ }
+ }
+}
+
+void CharLayer::play_frame_effect(int p_frame)
+{
+ if (p_frame < max_frames) {
+ foreach (QString effect, movie_effects[p_frame]) {
+ if (effect == "shake") {
+ shake();
+#ifdef DEBUG_MOVIE
+ qDebug() << "Attempting to play shake on frame" << frame;
+#endif
+ }
+
+ if (effect == "flash") {
+ flash();
+#ifdef DEBUG_MOVIE
+ qDebug() << "Attempting to play flash on frame" << frame;
+#endif
+ }
+
+ if (effect.startsWith("sfx^")) {
+ QString sfx = effect.section("^", 1);
+ play_sfx(sfx);
+#ifdef DEBUG_MOVIE
+ qDebug() << "Attempting to play sfx" << sfx << "on frame" << frame;
+#endif
+ }
+ }
+ }
+}
+
+void AOLayer::stop()
+{
+ // for all intents and purposes, stopping is the same as hiding. at no point
+ // do we want a frozen gif to display
+ this->freeze();
+ this->hide();
+}
+
+void AOLayer::freeze()
+{
+ // aT nO pOiNt Do We WaNt A fRoZeN gIf To DiSpLaY
+ ticker->stop();
+ preanim_timer->stop();
+ shfx_timer->stop();
+}
+
+void CharLayer::movie_ticker()
+{
+ AOLayer::movie_ticker();
+ play_frame_effect(frame);
+}
+
+void AOLayer::movie_ticker()
+{
+ ++frame;
+ if ((frame >= max_frames) && (max_frames > 1)) {
+ if (play_once) {
+ if (cull_image)
+ this->stop();
+ else
+ this->freeze();
+ preanim_done();
+ return;
+ }
+ else
+ frame = 0;
+ }
+ // qint64 difference = elapsed - movie_delays[frame];
+ if (frame >= movie_frames.size()) {
+ movie_frames.append(this->get_pixmap(m_reader.read()));
+ movie_delays.append(m_reader.nextImageDelay());
+ }
+
+#ifdef DEBUG_MOVIE
+ qDebug() << frame << movie_delays[frame]
+ << "actual time taken from last frame:" << actual_time.restart();
+#endif
+
+ this->set_frame(movie_frames[frame]);
+ ticker->setInterval(this->get_frame_delay(movie_delays[frame]));
+}
+
+void CharLayer::preanim_done()
+{
+ if (is_preanim)
+ AOLayer::preanim_done();
+ else
+ return;
+}
+
+void AOLayer::preanim_done()
+{
+ ticker->stop();
+ preanim_timer->stop();
+ done();
+}
+
+void AOLayer::shfx_timer_done()
+{
+ this->stop();
+#ifdef DEBUG_MOVIE
+ qDebug() << "shfx timer signaled done";
+#endif
+ // signal connected to courtroom object, let it figure out what to do
+ done();
+}
diff --git a/src/aomovie.cpp b/src/aomovie.cpp
deleted file mode 100644
index 196c1d3e..00000000
--- a/src/aomovie.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-#include "aomovie.h"
-
-#include "courtroom.h"
-#include "file_functions.h"
-#include "misc_functions.h"
-
-AOMovie::AOMovie(QWidget *p_parent, AOApplication *p_ao_app) : QLabel(p_parent)
-{
- ao_app = p_ao_app;
-
- m_movie = new QMovie();
- m_movie->setCacheMode(QMovie::CacheAll);
-
- this->setMovie(m_movie);
-
- timer = new QTimer(this);
- timer->setTimerType(Qt::PreciseTimer);
- timer->setSingleShot(true);
-
- connect(m_movie, SIGNAL(frameChanged(int)), this, SLOT(frame_change(int)));
- connect(timer, SIGNAL(timeout()), this, SLOT(timer_done()));
-}
-
-void AOMovie::set_play_once(bool p_play_once) { play_once = p_play_once; }
-
-void AOMovie::play(QString p_image, QString p_char, QString p_custom_theme,
- int duration)
-{
- m_movie->stop();
-
- QString shout_path = p_image;
- if (!file_exists(p_image)) {
- QList<QString> pathlist;
-
- pathlist = {
- ao_app->get_image_suffix(
- ao_app->get_character_path(p_char, p_image)), // Character folder
- ao_app->get_image_suffix(ao_app->get_base_path() + "misc/" +
- p_custom_theme + "/" + p_image), // Misc path
- ao_app->get_image_suffix(ao_app->get_custom_theme_path(
- p_custom_theme, p_image)), // Custom theme path
- ao_app->get_image_suffix(ao_app->get_theme_path(p_image)), // Theme path
- ao_app->get_image_suffix(
- ao_app->get_default_theme_path(p_image)), // Default theme path
- ao_app->get_image_suffix(
- ao_app->get_theme_path("placeholder")), // Placeholder path
- ao_app->get_image_suffix(ao_app->get_default_theme_path(
- "placeholder")), // Default placeholder path
- };
-
- for (QString path : pathlist) {
- if (file_exists(path)) {
- shout_path = path;
- break;
- }
- }
- }
-
- m_movie->setFileName(shout_path);
-
- if (m_movie->loopCount() == 0)
- play_once = true;
-
- this->show();
- m_movie->start();
- if (m_movie->frameCount() == 0 && duration > 0)
- timer->start(duration);
-}
-
-void AOMovie::stop()
-{
- m_movie->stop();
- this->hide();
-}
-
-void AOMovie::frame_change(int n_frame)
-{
- // If it's a "static movie" (only one frame - png image), we can't change
- // frames - ignore this function (use timer instead). If the frame didn't reach
- // the last frame or the movie is continuous, don't stop the movie.
- if (m_movie->frameCount() == 0 || n_frame < (m_movie->frameCount() - 1) ||
- !play_once)
- return;
- // we need this or else the last frame wont show
- timer->start(m_movie->nextFrameDelay());
-}
-
-void AOMovie::timer_done()
-{
- this->stop();
- // signal connected to courtroom object, let it figure out what to do
- done();
-}
-
-void AOMovie::combo_resize(int w, int h)
-{
- QSize f_size(w, h);
- this->resize(f_size);
- m_movie->setScaledSize(f_size);
-}
diff --git a/src/aomusicplayer.cpp b/src/aomusicplayer.cpp
index 6219edfb..b36de486 100644
--- a/src/aomusicplayer.cpp
+++ b/src/aomusicplayer.cpp
@@ -96,7 +96,7 @@ void AOMusicPlayer::play(QString p_song, int channel, bool loop,
BASS_ChannelLock(oldstream, false);
}
- if (effect_flags & FADE_OUT) {
+ if (effect_flags & FADE_OUT & (m_volume[channel] != 0)) {
// Fade out the other sample and stop it (due to -1)
BASS_ChannelSlideAttribute(oldstream, BASS_ATTRIB_VOL | BASS_SLIDE_LOG,
-1, 4000);
@@ -116,6 +116,7 @@ void AOMusicPlayer::play(QString p_song, int channel, bool loop,
BASS_ChannelSlideAttribute(newstream, BASS_ATTRIB_VOL,
static_cast<float>(m_volume[channel] / 100.0f),
1000);
+
}
else
this->set_volume(m_volume[channel], channel);
@@ -149,12 +150,15 @@ void AOMusicPlayer::set_volume(int p_value, int channel)
void CALLBACK loopProc(HSYNC handle, DWORD channel, DWORD data, void *user)
{
+ UNUSED(handle);
+ UNUSED(data);
QWORD loop_start = *(static_cast<unsigned *>(user));
BASS_ChannelLock(channel, true);
BASS_ChannelSetPosition(channel, loop_start, BASS_POS_BYTE);
BASS_ChannelLock(channel, false);
}
+
void AOMusicPlayer::set_looping(bool toggle, int channel)
{
m_looping = toggle;
diff --git a/src/aooptionsdialog.cpp b/src/aooptionsdialog.cpp
index 7b425207..0fbee478 100644
--- a/src/aooptionsdialog.cpp
+++ b/src/aooptionsdialog.cpp
@@ -182,7 +182,7 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app)
ui_stay_time_lbl->setText(tr("Text Stay Time:"));
ui_stay_time_lbl->setToolTip(tr(
"Minimum amount of time (in miliseconds) an IC message must stay on screen before "
- "the next IC message is shown, acting as a 'queue'. Set to 0 to disable this behaivor."));
+ "the next IC message is shown, acting as a 'queue'. Set to 0 to disable this behavior."));
ui_gameplay_form->setWidget(row, QFormLayout::LabelRole, ui_stay_time_lbl);
@@ -219,6 +219,19 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app)
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_instant_objection_cb);
row += 1;
+ ui_chat_ratelimit_lbl = new QLabel(ui_form_layout_widget);
+ ui_chat_ratelimit_lbl->setText(tr("Chat Rate Limit:"));
+ ui_chat_ratelimit_lbl->setToolTip(tr(
+ "Minimum amount of time (in miliseconds) that must pass before the next Enter key press will send your IC message."));
+
+ ui_gameplay_form->setWidget(row, QFormLayout::LabelRole, ui_chat_ratelimit_lbl);
+
+ ui_chat_ratelimit_spinbox = new QSpinBox(ui_form_layout_widget);
+ ui_chat_ratelimit_spinbox->setMaximum(5000);
+ ui_chat_ratelimit_spinbox->setValue(p_ao_app->get_chat_ratelimit());
+
+ ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_chat_ratelimit_spinbox);
+ row += 1;
ui_log_names_divider = new QFrame(ui_form_layout_widget);
ui_log_names_divider->setFrameShape(QFrame::HLine);
ui_log_names_divider->setFrameShadow(QFrame::Sunken);
@@ -824,6 +837,7 @@ void AOOptionsDialog::save_pressed()
configini->setValue("desync_logs", ui_desync_logs_cb->isChecked());
configini->setValue("stay_time", ui_stay_time_spinbox->value());
configini->setValue("instant_objection", ui_instant_objection_cb->isChecked());
+ configini->setValue("chat_ratelimit", ui_chat_ratelimit_spinbox->value());
configini->setValue("default_username", ui_username_textbox->text());
configini->setValue("show_custom_shownames", ui_showname_cb->isChecked());
configini->setValue("master", ui_ms_textbox->text());
diff --git a/src/aopacket.cpp b/src/aopacket.cpp
index bb6ac73b..a40d2ef7 100644
--- a/src/aopacket.cpp
+++ b/src/aopacket.cpp
@@ -8,9 +8,15 @@ AOPacket::AOPacket(QString p_packet_string)
m_contents = packet_contents.mid(1, packet_contents.size()-2); // trims %
}
-QString AOPacket::to_string()
+QString AOPacket::to_string(bool encoded)
{
- return m_header + "#" + m_contents.join("#") + "#%";
+ QStringList contents = m_contents;
+ if (encoded)
+ contents.replaceInStrings("#", "<num>")
+ .replaceInStrings("%", "<percent>")
+ .replaceInStrings("$", "<dollar>")
+ .replaceInStrings("&", "<and>");
+ return m_header + "#" + contents.join("#") + "#%";
}
void AOPacket::net_encode()
diff --git a/src/aoscene.cpp b/src/aoscene.cpp
deleted file mode 100644
index 78d69acd..00000000
--- a/src/aoscene.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-#include "aoscene.h"
-#include "courtroom.h"
-#include "file_functions.h"
-
-AOScene::AOScene(QWidget *parent, AOApplication *p_ao_app) : QLabel(parent)
-{
- m_parent = parent;
- ao_app = p_ao_app;
- m_movie = new QMovie(this);
- m_movie->setCacheMode(QMovie::CacheAll);
- last_image = "";
-}
-
-void AOScene::set_image(QString p_image)
-{
- QString background_path =
- ao_app->get_image_suffix(ao_app->get_background_path(p_image));
- if (!file_exists(background_path)) // If image is missing, clear current image
- {
- this->clear();
- this->setMovie(nullptr);
-
- m_movie->stop();
- last_image = "";
- return;
- }
-
- if (!file_exists(background_path) || background_path != last_image)
- {
- this->clear();
- this->setMovie(nullptr);
-
- m_movie->stop();
- m_movie->setFileName(background_path);
- }
-
- if (m_movie->isValid() && m_movie->frameCount() > 1) {
- m_movie->jumpToNextFrame();
- float scale_factor = static_cast<float>(f_h) /
- static_cast<float>(m_movie->frameRect().height());
- // preserve aspect ratio
- int n_w = static_cast<int>(m_movie->frameRect().width() * scale_factor);
- int n_h = static_cast<int>(m_movie->frameRect().height() * scale_factor);
-
- m_movie->setScaledSize(QSize(n_w, n_h));
- this->resize(m_movie->scaledSize());
- if (!file_exists(background_path) || background_path != last_image)
- {
- this->setMovie(m_movie);
- m_movie->start();
- }
- QLabel::move(x + (f_w - n_w) / 2, y + (f_h - n_h) / 2); // Center
- }
- else {
- QPixmap background(background_path);
- auto transform_mode = Qt::FastTransformation;
- if (background.height() > f_h) // We are downscaling, use anti-aliasing.
- transform_mode = Qt::SmoothTransformation;
-
- background = background.scaledToHeight(f_h, transform_mode);
- this->resize(background.size());
- this->setPixmap(background);
- QLabel::move(
- x + (f_w - background.width()) / 2,
- y + (f_h - background.height()) /
- 2); // Always center horizontally, always center vertically
- }
- last_image = background_path;
-}
-
-void AOScene::set_legacy_desk(QString p_image)
-{
-
- QString desk_path =
- ao_app->get_image_suffix(ao_app->get_background_path(p_image));
- if (!file_exists(desk_path)) // If image is missing, clear current image
- {
- this->clear();
- this->setMovie(nullptr);
-
- m_movie->stop();
- last_image = "";
- return;
- }
-
- if (file_exists(desk_path) && desk_path == last_image)
- return;
-
- 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 h_modifier = vp_height / 192;
-
- int final_h = static_cast<int>(h_modifier * f_desk.height());
-
- 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() && m_movie->frameCount() > 1) {
- 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;
-}
-
-void AOScene::combo_resize(int w, int h)
-{
- QSize f_size(w, h);
- f_w = w;
- f_h = h;
- this->resize(f_size);
-}
-
-void AOScene::move(int ax, int ay)
-{
- x = ax;
- y = ay;
- QLabel::move(x, y);
-}
diff --git a/src/charselect.cpp b/src/charselect.cpp
index 33cc5176..abed0950 100644
--- a/src/charselect.cpp
+++ b/src/charselect.cpp
@@ -11,6 +11,16 @@ void Courtroom::construct_char_select()
ui_char_select_background = new AOImage(this, ao_app);
+ ui_char_list = new QTreeWidget(ui_char_select_background);
+ ui_char_list->setColumnCount(2);
+ ui_char_list->setHeaderLabels({"Name", "ID"});
+ ui_char_list->setHeaderHidden(true);
+ ui_char_list->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
+ ui_char_list->hideColumn(1);
+ ui_char_list->setDropIndicatorShown(true);
+ set_size_and_pos(ui_char_list, "char_list");
+
+
ui_char_buttons = new QWidget(ui_char_select_background);
ui_selector = new AOImage(ui_char_select_background, ao_app);
@@ -46,6 +56,9 @@ void Courtroom::construct_char_select()
set_size_and_pos(ui_char_buttons, "char_buttons");
+ connect(ui_char_list, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)),
+ this, SLOT(on_char_list_double_clicked(QTreeWidgetItem *, int)));
+
connect(ui_back_to_lobby, SIGNAL(clicked()), this,
SLOT(on_back_to_lobby_clicked()));
@@ -126,6 +139,21 @@ void Courtroom::set_char_select_page()
put_button_in_place(current_char_page * max_chars_on_page, chars_on_page);
}
+void Courtroom::on_char_list_double_clicked(QTreeWidgetItem *p_item, int column)
+{
+ UNUSED(column);
+ int cid = p_item->text(1).toInt();
+ if (cid == -1 && !p_item->isExpanded()) {
+ p_item->setExpanded(true);
+ return;
+ }
+ else if (cid == -1) {
+ p_item->setExpanded(false);
+ return;
+ }
+ char_clicked(cid);
+}
+
void Courtroom::char_clicked(int n_char)
{
if (n_char != -1)
@@ -218,7 +246,32 @@ void Courtroom::character_loading_finished()
char_button->set_image(char_list.at(n).name);
char_button->setToolTip(char_list.at(n).name);
ui_char_button_list.append(char_button);
-
+ QString char_category = ao_app->get_category(char_list.at(n).name);
+ QList<QTreeWidgetItem*> matching_list = ui_char_list->findItems(char_category, Qt::MatchFixedString, 0);
+ // create the character tree item
+ QTreeWidgetItem *treeItem = new QTreeWidgetItem();
+ treeItem->setText(0, char_list.at(n).name);
+ treeItem->setIcon(0, QIcon(ao_app->get_static_image_suffix(
+ ao_app->get_character_path(char_list.at(n).name, "char_icon"))));
+ treeItem->setText(1, QString::number(n));
+ // category logic
+ QTreeWidgetItem *category;
+ if (char_category == "") // no category
+ ui_char_list->addTopLevelItem(treeItem);
+ else if (!matching_list.isEmpty()) { // our category already exists
+ category = matching_list[0];
+ category->addChild(treeItem);
+ }
+ else { // we need to make a new category
+ category = new QTreeWidgetItem();
+ category->setText(0, char_category);
+ category->setText(1, "-1");
+ category->setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicatorWhenChildless);
+ ui_char_list->insertTopLevelItem(0, category);
+ category->addChild(treeItem);
+ }
+
+
connect(char_button, &AOCharButton::clicked,
[this, n]() { this->char_clicked(n); });
@@ -241,7 +294,7 @@ void Courtroom::character_loading_finished()
.arg(QString::number(ao_app->char_list_size)));
}
}
-
+ ui_char_list->expandAll();
filter_character_list();
}
@@ -250,24 +303,37 @@ void Courtroom::filter_character_list()
ui_char_button_list_filtered.clear();
for (int i = 0; i < char_list.size(); i++) {
AOCharButton *current_char = ui_char_button_list.at(i);
+ QTreeWidgetItem* current_char_list_item = ui_char_list->findItems(QString::number(i), Qt::MatchExactly | Qt::MatchRecursive, 1)[0];
+
+
// It seems passwording characters is unimplemented yet?
// Until then, this will stay here, I suppose.
// if (ui_char_passworded->isChecked() && character_is_passworded??)
// continue;
- if (!ui_char_taken->isChecked() && char_list.at(i).taken)
+ if (!ui_char_taken->isChecked() && char_list.at(i).taken) {
+ current_char_list_item->setHidden(true);
continue;
+ }
if (!char_list.at(i).name.contains(ui_char_search->text(),
- Qt::CaseInsensitive))
+ Qt::CaseInsensitive)) {
+ current_char_list_item->setHidden(true);
continue;
+ }
// We only really need to update the fact that a character is taken
// for the buttons that actually appear.
// You'd also update the passwordedness and etc. here later.
current_char->reset();
+ current_char_list_item->setHidden(false);
current_char->set_taken(char_list.at(i).taken);
+ current_char_list_item->setText(0, char_list.at(i).name);
+ // reset disabled
+ current_char_list_item->setDisabled(false);
+ if (char_list.at(i).taken) // woops, we are taken
+ current_char_list_item->setDisabled(true);
ui_char_button_list_filtered.append(current_char);
}
diff --git a/src/courtroom.cpp b/src/courtroom.cpp
index 0c36215f..4b37e6f9 100644
--- a/src/courtroom.cpp
+++ b/src/courtroom.cpp
@@ -43,21 +43,22 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
ui_background = new AOImage(this, ao_app);
ui_viewport = new QWidget(this);
- ui_vp_background = new AOScene(ui_viewport, ao_app);
- ui_vp_speedlines = new AOMovie(ui_viewport, ao_app);
- ui_vp_speedlines->set_play_once(false);
- ui_vp_player_char = new AOCharMovie(ui_viewport, ao_app);
- ui_vp_sideplayer_char = new AOCharMovie(ui_viewport, ao_app);
+ ui_vp_background = new BackgroundLayer(ui_viewport, ao_app);
+ ui_vp_speedlines = new ForegroundLayer(ui_viewport, ao_app);
+ ui_vp_player_char = new CharLayer(ui_viewport, ao_app);
+ ui_vp_sideplayer_char = new CharLayer(ui_viewport, ao_app);
ui_vp_sideplayer_char->hide();
- ui_vp_desk = new AOScene(ui_viewport, ao_app);
- ui_vp_legacy_desk = new AOScene(ui_viewport, ao_app);
+ ui_vp_desk = new BackgroundLayer(ui_viewport, ao_app);
+
+ ui_vp_effect = new EffectLayer(this, ao_app);
+ ui_vp_effect->setAttribute(Qt::WA_TransparentForMouseEvents);
ui_vp_evidence_display = new AOEvidenceDisplay(ui_viewport, ao_app);
ui_vp_chatbox = new AOImage(this, ao_app);
ui_vp_showname = new QLabel(ui_vp_chatbox);
ui_vp_showname->setAlignment(Qt::AlignLeft);
- ui_vp_chat_arrow = new AOMovie(ui_vp_chatbox, ao_app);
+ ui_vp_chat_arrow = new InterfaceLayer(this, ao_app);
ui_vp_chat_arrow->set_play_once(false);
ui_vp_message = new QTextEdit(this);
@@ -66,14 +67,13 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
ui_vp_message->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui_vp_message->setReadOnly(true);
- ui_vp_testimony = new AOMovie(this, ao_app);
+ ui_vp_testimony = new InterfaceLayer(this, ao_app);
ui_vp_testimony->set_play_once(false);
ui_vp_testimony->setAttribute(Qt::WA_TransparentForMouseEvents);
- ui_vp_effect = new AOMovie(this, ao_app);
- ui_vp_effect->setAttribute(Qt::WA_TransparentForMouseEvents);
- ui_vp_wtce = new AOMovie(this, ao_app);
+ ui_vp_wtce = new InterjectionLayer(this, ao_app);
+ ui_vp_wtce->set_play_once(true);
ui_vp_wtce->setAttribute(Qt::WA_TransparentForMouseEvents);
- ui_vp_objection = new AOMovie(this, ao_app);
+ ui_vp_objection = new InterjectionLayer(this, ao_app);
ui_vp_objection->setAttribute(Qt::WA_TransparentForMouseEvents);
ui_ic_chatlog = new QTextEdit(this);
@@ -110,8 +110,10 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
ui_music_list->header()->setStretchLastSection(false);
ui_music_list->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
ui_music_list->setContextMenuPolicy(Qt::CustomContextMenu);
+ ui_music_list->setUniformRowHeights(true);
+
- ui_music_display = new AOMovie(this, ao_app);
+ ui_music_display = new InterfaceLayer(this, ao_app);
ui_music_display->set_play_once(false);
ui_music_display->setAttribute(Qt::WA_TransparentForMouseEvents);
@@ -138,6 +140,10 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
// todo: filter out \n from showing up as that commonly breaks the chatlog and
// can be spammed to hell
+ ui_vp_sticker = new StickerLayer(ui_viewport, ao_app);
+ ui_vp_sticker->set_play_once(false);
+ ui_vp_sticker->setAttribute(Qt::WA_TransparentForMouseEvents);
+
ui_muted = new AOImage(ui_ic_chat_message, ao_app);
ui_muted->hide();
@@ -275,6 +281,8 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
connect(keepalive_timer, SIGNAL(timeout()), this, SLOT(ping_server()));
connect(ui_vp_objection, SIGNAL(done()), this, SLOT(objection_done()));
+ connect(ui_vp_effect, SIGNAL(done()), this, SLOT(effect_done()));
+ connect(ui_vp_wtce, SIGNAL(done()), this, SLOT(effect_done()));
connect(ui_vp_player_char, SIGNAL(done()), this, SLOT(preanim_done()));
connect(ui_vp_player_char, SIGNAL(shake()), this, SLOT(do_screenshake()));
connect(ui_vp_player_char, SIGNAL(flash()), this, SLOT(do_flash()));
@@ -303,6 +311,8 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
connect(ui_sfx_dropdown, SIGNAL(currentIndexChanged(int)), this,
SLOT(on_sfx_dropdown_changed(int)));
+ connect(ui_sfx_dropdown, SIGNAL(editTextChanged(QString)), this,
+ SLOT(on_sfx_dropdown_custom(QString)));
connect(ui_sfx_dropdown, SIGNAL(customContextMenuRequested(QPoint)), this,
SLOT(on_sfx_context_menu_requested(QPoint)));
connect(ui_sfx_remove, SIGNAL(clicked()), this,
@@ -534,14 +544,6 @@ void Courtroom::set_widgets()
ui_vp_desk->move(0, 0);
ui_vp_desk->combo_resize(ui_viewport->width(), ui_viewport->height());
- // the size of the ui_vp_legacy_desk element relies on various factors and is
- // set in set_scene()
-
- double y_modifier = 147.0 / 192.0;
- int final_y = static_cast<int>(y_modifier * ui_viewport->height());
- ui_vp_legacy_desk->move(0, final_y);
- ui_vp_legacy_desk->hide();
-
ui_vp_evidence_display->move(0, 0);
ui_vp_evidence_display->combo_resize(ui_viewport->width(),
ui_viewport->height());
@@ -555,11 +557,14 @@ void Courtroom::set_widgets()
ui_vp_chat_arrow->hide();
}
else {
- ui_vp_chat_arrow->move(design_ini_result.x, design_ini_result.y);
- ui_vp_chat_arrow->combo_resize(design_ini_result.width,
- design_ini_result.height);
+ ui_vp_chat_arrow->move(design_ini_result.x + ui_vp_chatbox->x(), design_ini_result.y + ui_vp_chatbox->y());
+ ui_vp_chat_arrow->combo_resize(design_ini_result.width, design_ini_result.height);
}
+ // layering shenanigans with ui_vp_chatbox prevent us from doing the sensible
+ // thing, which is to parent these to ui_viewport. instead, AOLayer handles
+ // masking so we don't overlap parts of the UI, and they become free floating
+ // widgets.
ui_vp_testimony->move(ui_viewport->x(), ui_viewport->y());
ui_vp_testimony->combo_resize(ui_viewport->width(), ui_viewport->height());
@@ -634,6 +639,17 @@ void Courtroom::set_widgets()
set_size_and_pos(ui_music_list, "music_list");
ui_music_list->header()->setMinimumSectionSize(ui_music_list->width());
+ QString music_list_indentation = ao_app->get_font_name("music_list_indent", "courtroom_design.ini");
+ if (music_list_indentation == "")
+ ui_music_list->resetIndentation();
+ else
+ ui_music_list->setIndentation(music_list_indentation.toInt());
+
+ QString music_list_animated = ao_app->get_font_name("music_list_animated", "courtroom_design.ini");
+ if (music_list_animated == "1")
+ ui_music_list->setAnimated(true);
+ else
+ ui_music_list->setAnimated(false);
set_size_and_pos(ui_music_name, "music_name");
@@ -642,7 +658,7 @@ void Courtroom::set_widgets()
ao_app->get_element_dimensions("music_display", "courtroom_design.ini");
if (design_ini_result.width < 0 || design_ini_result.height < 0) {
- qDebug() << "W: could not find \"music_name\" in courtroom_design.ini";
+ qDebug() << "W: could not find \"music_display\" in courtroom_design.ini";
ui_music_display->hide();
}
else {
@@ -650,9 +666,8 @@ void Courtroom::set_widgets()
ui_music_display->combo_resize(design_ini_result.width,
design_ini_result.height);
}
+ ui_music_display->load_image("music_display", "");
- ui_music_display->play("music_display");
- ui_music_display->set_play_once(false);
for (int i = 0; i < max_clocks; i++) {
set_size_and_pos(ui_clock[i], "clock_" + QString::number(i));
@@ -660,12 +675,12 @@ void Courtroom::set_widgets()
if (is_ao2_bg) {
set_size_and_pos(ui_ic_chat_message, "ao2_ic_chat_message");
- set_size_and_pos(ui_vp_chatbox, "ao2_chatbox");
+ // set_size_and_pos(ui_vp_chatbox, "ao2_chatbox");
set_size_and_pos(ui_ic_chat_name, "ao2_ic_chat_name");
}
else {
set_size_and_pos(ui_ic_chat_message, "ic_chat_message");
- set_size_and_pos(ui_vp_chatbox, "chatbox");
+ // set_size_and_pos(ui_vp_chatbox, "chatbox");
set_size_and_pos(ui_ic_chat_name, "ic_chat_name");
}
@@ -688,6 +703,10 @@ void Courtroom::set_widgets()
ui_vp_message->y() + ui_vp_chatbox->y());
ui_vp_message->setTextInteractionFlags(Qt::NoTextInteraction);
+ ui_vp_sticker->move(0, 0);
+ ui_vp_sticker->combo_resize(ui_viewport->width(),
+ ui_viewport->height());
+
ui_muted->resize(ui_ic_chat_message->width(), ui_ic_chat_message->height());
ui_muted->set_image("muted");
ui_muted->setToolTip(tr("Oops, you're muted!"));
@@ -729,7 +748,7 @@ void Courtroom::set_widgets()
set_size_and_pos(ui_sfx_dropdown, "sfx_dropdown");
ui_sfx_dropdown->setEditable(true);
- ui_sfx_dropdown->setInsertPolicy(QComboBox::InsertAtBottom);
+ ui_sfx_dropdown->setInsertPolicy(QComboBox::NoInsert);
ui_sfx_dropdown->setToolTip(
tr("Set a sound effect to play on your next 'Preanim'. Leaving it on "
"Default will use the emote-defined sound (if any).\n"
@@ -1118,6 +1137,24 @@ void Courtroom::set_size_and_pos(QWidget *p_widget, QString p_identifier)
}
}
+void Courtroom::set_size_and_pos(QWidget *p_widget, QString p_identifier,
+ QString p_char)
+{
+ QString filename = "courtroom_design.ini";
+
+ pos_size_type design_ini_result =
+ ao_app->get_element_dimensions(p_identifier, filename, p_char);
+
+ if (design_ini_result.width < 0 || design_ini_result.height < 0) {
+ qDebug() << "W: could not find \"" << p_identifier << "\" in " << filename;
+ p_widget->hide();
+ }
+ else {
+ p_widget->move(design_ini_result.x, design_ini_result.y);
+ p_widget->resize(design_ini_result.width, design_ini_result.height);
+ }
+}
+
void Courtroom::set_taken(int n_char, bool p_taken)
{
if (n_char >= char_list.size()) {
@@ -1160,13 +1197,20 @@ void Courtroom::done_received()
objection_player->set_volume(0);
blip_player->set_volume(0);
- set_char_select_page();
+ if (char_list.size() > 0)
+ {
+ set_char_select_page();
+ set_char_select();
+ }
+ else
+ {
+ update_character(m_cid);
+ enter_courtroom();
+ }
set_mute_list();
set_pair_list();
- set_char_select();
-
show();
ui_spectator->show();
@@ -1210,11 +1254,11 @@ void Courtroom::set_background(QString p_background, bool display)
is_ao2_bg = true;
if (is_ao2_bg) {
- set_size_and_pos(ui_vp_chatbox, "ao2_chatbox");
+ // set_size_and_pos(ui_vp_chatbox, "ao2_chatbox");
set_size_and_pos(ui_ic_chat_message, "ao2_ic_chat_message");
}
else {
- set_size_and_pos(ui_vp_chatbox, "chatbox");
+ // set_size_and_pos(ui_vp_chatbox, "chatbox");
set_size_and_pos(ui_ic_chat_message, "ic_chat_message");
}
@@ -1280,8 +1324,6 @@ void Courtroom::set_pos_dropdown(QStringList pos_dropdowns)
ui_pos_dropdown->addItems(pos_dropdown_list);
// Unblock the signals so the element can be used for setting pos again
ui_pos_dropdown->blockSignals(false);
-
- qDebug() << pos_dropdown_list;
}
void Courtroom::update_character(int p_cid)
@@ -1324,7 +1366,6 @@ void Courtroom::update_character(int p_cid)
set_sfx_dropdown();
set_effects_dropdown();
- qDebug() << "update_character called";
if (newchar) // Avoid infinite loop of death and suffering
set_iniswap_dropdown();
@@ -1397,6 +1438,12 @@ void Courtroom::update_character(int p_cid)
}
}
}
+ if (is_ao2_bg) {
+ set_size_and_pos(ui_vp_chatbox, "ao2_chatbox", f_char);
+ }
+ else {
+ set_size_and_pos(ui_vp_chatbox, "chatbox", f_char);
+ }
if (m_cid != -1) // there is no name at char_list -1, and we crash if we try
// to find one
@@ -1622,7 +1669,7 @@ void Courtroom::on_chat_return_pressed()
return;
ui_ic_chat_message->blockSignals(true);
- QTimer::singleShot(200, this,
+ QTimer::singleShot(ao_app->get_chat_ratelimit(), this,
[=] { ui_ic_chat_message->blockSignals(false); });
// MS#
// deskmod#
@@ -1681,12 +1728,6 @@ void Courtroom::on_chat_return_pressed()
packet_contents.append(current_side);
packet_contents.append(get_char_sfx());
- if (ui_pre->isChecked() && !ao_app->is_stickysounds_enabled() && ui_sfx_dropdown->currentIndex() > 1) {
- ui_sfx_dropdown->blockSignals(true);
- ui_sfx_dropdown->setCurrentIndex(0);
- ui_sfx_dropdown->blockSignals(false);
- ui_sfx_remove->hide();
- }
int f_emote_mod = ao_app->get_emote_mod(current_char, current_emote);
@@ -1838,7 +1879,8 @@ void Courtroom::on_chat_return_pressed()
packet_contents.append(ui_additive->isChecked() ? "1" : "0");
}
if (ao_app->effects_enabled) {
- QString fx_sound = ao_app->get_effect_sound(effect, current_char);
+ QString fx_sound =
+ ao_app->get_effect_property(effect, current_char, "sound");
QString p_effect =
ao_app->read_char_ini(current_char, "effects", "Options");
packet_contents.append(effect + "|" + p_effect + "|" + fx_sound);
@@ -1862,8 +1904,6 @@ void Courtroom::reset_ui()
realization_state = 0;
screenshake_state = 0;
is_presenting_evidence = false;
- if (!ao_app->is_stickypres_enabled())
- ui_pre->setChecked(false);
ui_hold_it->set_image("holdit");
ui_objection->set_image("objection");
ui_take_that->set_image("takethat");
@@ -1871,6 +1911,14 @@ void Courtroom::reset_ui()
ui_realization->set_image("realization");
ui_screenshake->set_image("screenshake");
ui_evidence_present->set_image("present");
+
+ if (ui_pre->isChecked() && !ao_app->is_stickysounds_enabled()) {
+ ui_sfx_dropdown->setCurrentIndex(0);
+ ui_sfx_remove->hide();
+ custom_sfx = "";
+ }
+ if (!ao_app->is_stickypres_enabled())
+ ui_pre->setChecked(false);
}
void Courtroom::chatmessage_enqueue(QStringList p_contents)
@@ -1913,12 +1961,9 @@ void Courtroom::chatmessage_enqueue(QStringList p_contents)
}
// Record the log I/O, log files should be accurate.
- log_chatmessage(p_contents[MESSAGE], f_char_id, p_contents[SHOWNAME], p_contents[TEXT_COLOR].toInt());
- if (ao_app->is_desyncrhonized_logs_enabled()) {
- // Display the logs immediately.
- display_log_chatmessage(p_contents[MESSAGE], f_char_id, p_contents[SHOWNAME], p_contents[TEXT_COLOR].toInt());
- }
-
+ // If desynced logs are on, display the log IC immediately.
+ LogMode log_mode = ao_app->is_desyncrhonized_logs_enabled() ? DISPLAY_AND_IO : IO_ONLY;
+ log_chatmessage(p_contents[MESSAGE], f_char_id, p_contents[SHOWNAME], p_contents[TEXT_COLOR].toInt(), log_mode);
// Send this boi into the queue
chatmessage_queue.enqueue(p_contents);
@@ -1933,11 +1978,12 @@ void Courtroom::chatmessage_enqueue(QStringList p_contents)
void Courtroom::chatmessage_dequeue()
{
// Chat stopped being processed, indicate that the user can post their message now.
- QString f_char = m_chatmessage[CHAR_NAME];
- QString f_custom_theme = ao_app->get_char_shouts(f_char);
- ui_vp_chat_arrow->play(
- "chat_arrow", f_char,
- f_custom_theme);
+ QString f_custom_theme;
+ if (ao_app->is_customchat_enabled()) {
+ QString f_char = m_chatmessage[CHAR_NAME];
+ f_custom_theme = ao_app->get_chat(f_char);
+ }
+ ui_vp_chat_arrow->load_image("chat_arrow", f_custom_theme);
// Nothing to parse in the queue
if (chatmessage_queue.isEmpty())
@@ -1969,7 +2015,7 @@ void Courtroom::unpack_chatmessage(QStringList p_contents)
if (!ao_app->is_desyncrhonized_logs_enabled()) {
// We have logs displaying as soon as we reach the message in our queue, which is a less confusing but also less accurate experience for the user.
- display_log_chatmessage(m_chatmessage[MESSAGE], m_chatmessage[CHAR_ID].toInt(), m_chatmessage[SHOWNAME], m_chatmessage[TEXT_COLOR].toInt());
+ log_chatmessage(m_chatmessage[MESSAGE], m_chatmessage[CHAR_ID].toInt(), m_chatmessage[SHOWNAME], m_chatmessage[TEXT_COLOR].toInt(), DISPLAY_ONLY);
}
// Process the callwords for this message
@@ -1988,7 +2034,7 @@ void Courtroom::unpack_chatmessage(QStringList p_contents)
handle_ic_message();
}
-void Courtroom::log_chatmessage(QString f_message, int f_char_id, QString f_showname, int f_color)
+void Courtroom::log_chatmessage(QString f_message, int f_char_id, QString f_showname, int f_color, LogMode f_log_mode)
{
// Display name will use the showname
QString f_displayname = f_showname;
@@ -2052,7 +2098,17 @@ void Courtroom::log_chatmessage(QString f_message, int f_char_id, QString f_show
}
break;
}
- log_ic_text(f_char, f_displayname, shout_message, tr("shouts"));
+ switch (f_log_mode) {
+ case IO_ONLY:
+ log_ic_text(f_char, f_displayname, shout_message, tr("shouts"));
+ break;
+ case DISPLAY_AND_IO:
+ log_ic_text(f_char, f_displayname, shout_message, tr("shouts"));
+ [[fallthrough]];
+ case DISPLAY_ONLY:
+ append_ic_text(shout_message, f_displayname, tr("shouts"));
+ break;
+ }
}
// Obtain evidence ID we're trying to work with
@@ -2061,106 +2117,35 @@ void Courtroom::log_chatmessage(QString f_message, int f_char_id, QString f_show
if (f_evi_id > 0 && f_evi_id <= local_evidence_list.size()) {
// Obtain the evidence name
QString f_evi_name = local_evidence_list.at(f_evi_id - 1).name;
- // Add the message to the logs file
- log_ic_text(f_showname, f_displayname, f_evi_name,
- tr("has presented evidence"));
+ switch (f_log_mode) {
+ case IO_ONLY:
+ log_ic_text(f_showname, f_displayname, f_evi_name, tr("has presented evidence"));
+ break;
+ case DISPLAY_AND_IO:
+ log_ic_text(f_showname, f_displayname, f_evi_name, tr("has presented evidence"));
+ [[fallthrough]];
+ case DISPLAY_ONLY:
+ append_ic_text(f_evi_name, f_displayname, tr("has presented evidence"));
+ break;
+ }
}
}
// If the chat message isn't a blankpost, or the chatlog history is empty, or its last message isn't a blankpost
if (!f_message.isEmpty() ||
ic_chatlog_history.isEmpty() || ic_chatlog_history.last().get_message() != "") {
- // Add the message to the logs file
- log_ic_text(f_showname, f_displayname, f_message, "",
- f_color);
- }
-}
-
-void Courtroom::display_log_chatmessage(QString f_message, int f_char_id, QString f_showname, int f_color)
-{
- // Display name will use the showname
- QString f_displayname = f_showname;
- if (f_char_id != -1) {
- // Grab the char.ini showname
- f_showname = ao_app->get_showname(char_list.at(f_char_id).name);
- // If custom serversided shownames are not enabled
- if (!ui_showname_enable->isChecked()) {
- // Set the display name to the char.ini showname
- f_displayname = f_showname;
- }
- }
- // If display name is just whitespace, use the char.ini showname.
- if (f_displayname.trimmed().isEmpty())
- f_displayname = f_showname;
-
- if (log_ic_actions) {
- // Check if a custom objection is in use
- int objection_mod = 0;
- QString custom_objection = "";
- if (m_chatmessage[OBJECTION_MOD].contains("4&")) {
- objection_mod = 4;
- custom_objection = m_chatmessage[OBJECTION_MOD].split(
- "4&")[1]; // takes the name of custom objection.
- }
- else {
- objection_mod = m_chatmessage[OBJECTION_MOD].toInt();
- }
-
- QString f_char = m_chatmessage[CHAR_NAME];
- QString f_custom_theme = ao_app->get_char_shouts(f_char);
- if (objection_mod <= 4 && objection_mod >= 1) {
- QString shout_message;
- switch (objection_mod) {
- case 1:
- shout_message = ao_app->read_char_ini(f_char, "holdit_message", "Shouts");
- if (shout_message == "")
- shout_message = tr("HOLD IT!");
- break;
- case 2:
- shout_message = ao_app->read_char_ini(f_char, "objection_message", "Shouts");
- if (shout_message == "")
- shout_message = tr("OBJECTION!");
+ switch (f_log_mode) {
+ case IO_ONLY:
+ log_ic_text(f_showname, f_displayname, f_message, "",f_color);
break;
- case 3:
- shout_message = ao_app->read_char_ini(f_char, "takethat_message", "Shouts");
- if (shout_message == "")
- shout_message = tr("TAKE THAT!");
+ case DISPLAY_AND_IO:
+ log_ic_text(f_showname, f_displayname, f_message, "",f_color);
+ [[fallthrough]];
+ case DISPLAY_ONLY:
+ append_ic_text(f_message, f_displayname, "",f_color);
break;
- // case 4 is AO2 only
- case 4:
- if (custom_objection != "") {
- shout_message = ao_app->read_char_ini(f_char, custom_objection.split('.')[0] + "_message", "Shouts");
- if (shout_message == "")
- shout_message = custom_objection.split('.')[0];
- }
- else {
- shout_message = ao_app->read_char_ini(f_char, "custom_message", "Shouts");
- if (shout_message == "")
- shout_message = tr("CUSTOM OBJECTION!");
- }
- break;
- }
- append_ic_text(shout_message, f_displayname, tr("shouts"));
- }
-
- // Obtain evidence ID we're trying to work with
- int f_evi_id = m_chatmessage[EVIDENCE_ID].toInt();
- // If the evidence ID is in the valid range
- if (f_evi_id > 0 && f_evi_id <= local_evidence_list.size()) {
- // Obtain the evidence name
- QString f_evi_name = local_evidence_list.at(f_evi_id - 1).name;
- // Append the message to the IC chatlogs in client
- append_ic_text(f_evi_name, f_displayname, tr("has presented evidence"));
}
}
-
- // If the chat message isn't a blankpost, or the chatlog history is empty, or its last message isn't a blankpost
- if (!f_message.isEmpty() ||
- ic_chatlog_history.isEmpty() || ic_chatlog_history.last().get_message() != "") {
- // Append the message to the IC chatlogs in client
- append_ic_text(f_message, f_displayname, "",
- f_color);
- }
}
bool Courtroom::handle_objection()
@@ -2177,64 +2162,75 @@ bool Courtroom::handle_objection()
objection_mod = m_chatmessage[OBJECTION_MOD].toInt();
}
- QString f_char = m_chatmessage[CHAR_NAME];
- QString f_custom_theme = ao_app->get_char_shouts(f_char);
+ if (is_ao2_bg) {
+ set_size_and_pos(ui_vp_chatbox, "ao2_chatbox", m_chatmessage[CHAR_NAME]);
+ }
+ else {
+ set_size_and_pos(ui_vp_chatbox, "chatbox", m_chatmessage[CHAR_NAME]);
+ }
+ set_size_and_pos(ui_vp_showname, "showname", m_chatmessage[CHAR_NAME]);
+ set_size_and_pos(ui_vp_message, "message", m_chatmessage[CHAR_NAME]);
+ ui_vp_message->move(ui_vp_message->x() + ui_vp_chatbox->x(),
+ ui_vp_message->y() + ui_vp_chatbox->y());
+ ui_vp_message->setTextInteractionFlags(Qt::NoTextInteraction);
// if an objection is used
if (objection_mod <= 4 && objection_mod >= 1) {
- QString shout_message;
+ ui_vp_objection->set_static_duration(shout_static_time);
+ ui_vp_objection->set_max_duration(shout_max_time);
+ QString filename;
switch (objection_mod) {
case 1:
- ui_vp_objection->play("holdit_bubble", f_char, f_custom_theme, 724);
- objection_player->play("holdit", f_char, f_custom_theme);
- shout_message = ao_app->read_char_ini(f_char, "holdit_message", "Shouts");
- if (shout_message == "")
- shout_message = tr("HOLD IT!");
+ filename = "holdit_bubble";
+ objection_player->play("holdit", m_chatmessage[CHAR_NAME],
+ ao_app->get_char_shouts(m_chatmessage[CHAR_NAME]));
break;
case 2:
- ui_vp_objection->play("objection_bubble", f_char, f_custom_theme, 724);
- objection_player->play("objection", f_char, f_custom_theme);
- shout_message = ao_app->read_char_ini(f_char, "objection_message", "Shouts");
- if (shout_message == "")
- shout_message = tr("OBJECTION!");
+ filename = "objection_bubble";
+ objection_player->play("objection", m_chatmessage[CHAR_NAME],
+ ao_app->get_char_shouts(m_chatmessage[CHAR_NAME]));
if (ao_app->objection_stop_music())
music_player->stop();
break;
case 3:
- ui_vp_objection->play("takethat_bubble", f_char, f_custom_theme, 724);
- objection_player->play("takethat", f_char, f_custom_theme);
- shout_message = ao_app->read_char_ini(f_char, "takethat_message", "Shouts");
- if (shout_message == "")
- shout_message = tr("TAKE THAT!");
+ filename = "takethat_bubble";
+ objection_player->play("takethat", m_chatmessage[CHAR_NAME],
+ ao_app->get_char_shouts(m_chatmessage[CHAR_NAME]));
break;
// case 4 is AO2 only
case 4:
if (custom_objection != "") {
- ui_vp_objection->play("custom_objections/" + custom_objection, f_char,
- f_custom_theme, shout_stay_time);
- objection_player->play("custom_objections/" +
- custom_objection.split('.')[0],
- f_char, f_custom_theme);
- shout_message = ao_app->read_char_ini(f_char, custom_objection.split('.')[0] + "_message", "Shouts");
- if (shout_message == "")
- shout_message = custom_objection.split('.')[0];
+ filename = "custom_objections/" + custom_objection;
+ objection_player->play(
+ "custom_objections/" + custom_objection.split('.')[0],
+ m_chatmessage[CHAR_NAME],
+ ao_app->get_char_shouts(m_chatmessage[CHAR_NAME]));
}
else {
- ui_vp_objection->play("custom", f_char, f_custom_theme,
- shout_stay_time);
- objection_player->play("custom", f_char, f_custom_theme);
- shout_message = ao_app->read_char_ini(f_char, "custom_message", "Shouts");
- if (shout_message == "")
- shout_message = tr("CUSTOM OBJECTION!");
+ filename = "custom";
+ objection_player->play(
+ "custom", m_chatmessage[CHAR_NAME],
+ ao_app->get_char_shouts(m_chatmessage[CHAR_NAME]));
}
- break;
+ break;
+ m_chatmessage[EMOTE_MOD] = 1;
}
+ ui_vp_objection->load_image(
+ filename, m_chatmessage[CHAR_NAME],
+ ao_app->get_char_shouts(m_chatmessage[CHAR_NAME]));
sfx_player->clear(); // Objection played! Cut all sfx.
return true;
}
+ display_character();
return false;
}
+void Courtroom::effect_done()
+{
+ ui_vp_effect->stop();
+ ui_vp_wtce->stop();
+}
+
void Courtroom::display_character()
{
// Stop all previously playing animations, effects etc.
@@ -2246,6 +2242,8 @@ void Courtroom::display_character()
// Hide the message and chatbox and handle the emotes
ui_vp_message->hide();
ui_vp_chatbox->hide();
+ // Hide the face sticker
+ ui_vp_sticker->stop();
// Initialize the correct pos (called SIDE here for some reason) with DESK_MOD to determine if we should hide the desk or not.
switch(m_chatmessage[DESK_MOD].toInt()) {
case 4:
@@ -2326,26 +2324,6 @@ void Courtroom::display_pair_character(QString other_charid, QString other_offse
ui_vp_sideplayer_char->move(ui_viewport->width() * offset_x / 100,
ui_viewport->height() * offset_y / 100);
- // Split the charid according to the ^ to determine if we have "ordering" info
- QStringList args = other_charid.split("^");
- if (args.size() >
- 1) // This ugly workaround is so we don't make an extra packet just
- // for this purpose. Rewrite pairing when?
- {
- // Change the order of appearance based on the pair order variable
- int order = args.at(1).toInt();
- switch (order) {
- case 0: // Our character is in front
- ui_vp_sideplayer_char->stackUnder(ui_vp_player_char);
- break;
- case 1: // Our character is behind
- ui_vp_player_char->stackUnder(ui_vp_sideplayer_char);
- break;
- default:
- break;
- }
- }
-
// Flip the pair character
if (ao_app->flipping_enabled && m_chatmessage[OTHER_FLIP].toInt() == 1)
ui_vp_sideplayer_char->set_flipped(true);
@@ -2353,10 +2331,11 @@ void Courtroom::display_pair_character(QString other_charid, QString other_offse
ui_vp_sideplayer_char->set_flipped(false);
// Play the other pair character's idle animation
- ui_vp_sideplayer_char->play_idle(m_chatmessage[OTHER_NAME],
- m_chatmessage[OTHER_EMOTE]);
+ QString filename = "(a)" + m_chatmessage[OTHER_EMOTE];
+ ui_vp_sideplayer_char->load_image(filename, m_chatmessage[OTHER_NAME],
+ 0, false);
+ }
}
- }
}
void Courtroom::handle_emote_mod(int emote_mod, bool p_immediate)
@@ -2487,7 +2466,11 @@ void Courtroom::do_flash()
QString f_char = m_chatmessage[CHAR_NAME];
QString f_custom_theme = ao_app->get_char_shouts(f_char);
- ui_vp_effect->play("realizationflash", f_char, f_custom_theme, 60);
+ ui_vp_effect->stretch = true;
+ ui_vp_effect->set_static_duration(60);
+ ui_vp_effect->set_max_duration(60);
+ ui_vp_effect->load_image(
+ ao_app->get_effect("realization", f_char, f_custom_theme), false);
}
void Courtroom::do_effect(QString fx_name, QString fx_sound, QString p_char,
@@ -2504,12 +2487,17 @@ void Courtroom::do_effect(QString fx_name, QString fx_sound, QString p_char,
// Only check if effects are disabled after playing the sound if it exists
if (!ao_app->is_effects_enabled())
return;
-
+ ui_vp_effect->transform_mode = ao_app->get_scaling(
+ ao_app->get_effect_property(fx_name, p_char, "scaling"));
+ ui_vp_effect->stretch =
+ ao_app->get_effect_property(fx_name, p_char, "stretch")
+ .startsWith("true");
ui_vp_effect->set_play_once(
false); // The effects themselves dictate whether or not they're looping.
// Static effects will linger.
- ui_vp_effect->play(effect); // It will set_play_once to true if the filepath
- // provided is not designed to loop more than once
+ ui_vp_effect->set_static_duration(0);
+ ui_vp_effect->set_max_duration(0);
+ ui_vp_effect->load_image(effect, false);
}
void Courtroom::play_char_sfx(QString sfx_name)
@@ -2520,10 +2508,10 @@ void Courtroom::play_char_sfx(QString sfx_name)
void Courtroom::initialize_chatbox()
{
int f_charid = m_chatmessage[CHAR_ID].toInt();
- if (f_charid >= 0 &&
+ if (f_charid >= 0 && f_charid < char_list.size() &&
(m_chatmessage[SHOWNAME].isEmpty() || !ui_showname_enable->isChecked())) {
QString real_name = char_list.at(f_charid).name;
-
+ ui_vp_player_char->set_static_duration(0);
QString f_showname = ao_app->get_showname(real_name);
ui_vp_showname->setText(f_showname);
@@ -2555,23 +2543,28 @@ void Courtroom::initialize_chatbox()
QString chatbox = ao_app->get_chat(customchar);
if (chatbox != "" && ao_app->is_customchat_enabled()) {
- chatbox_path = ao_app->get_base_path() + "misc/" + chatbox + "/chat";
- if (!ui_vp_chatbox->set_chatbox(chatbox_path))
- ui_vp_chatbox->set_chatbox(chatbox_path + "box");
+ chatbox_path = ao_app->get_theme_path("misc/" + chatbox + "/chat");
+ if (!ui_vp_chatbox->set_chatbox(chatbox_path)) {
+ chatbox_path = ao_app->get_base_path() + "misc/" + chatbox + "/chat";
+ if (!ui_vp_chatbox->set_chatbox(chatbox_path))
+ ui_vp_chatbox->set_chatbox(chatbox_path + "box");
+ }
}
// This should probably be called only if any change from the last chat
// arrow was actually detected.
- pos_size_type design_ini_result = ao_app->get_element_dimensions(
- "chat_arrow", "courtroom_design.ini", customchar);
- if (design_ini_result.width < 0 || design_ini_result.height < 0) {
- qDebug() << "W: could not find \"chat_arrow\" in courtroom_design.ini";
- ui_vp_chat_arrow->hide();
- }
- else {
- ui_vp_chat_arrow->move(design_ini_result.x, design_ini_result.y);
- ui_vp_chat_arrow->combo_resize(design_ini_result.width,
- design_ini_result.height);
+ if (current_misc != last_misc) {
+ pos_size_type design_ini_result = ao_app->get_element_dimensions(
+ "chat_arrow", "courtroom_design.ini", customchar);
+ if (design_ini_result.width < 0 || design_ini_result.height < 0) {
+ qDebug() << "W: could not find \"chat_arrow\" in courtroom_design.ini";
+ ui_vp_chat_arrow->hide();
+ }
+ else {
+ ui_vp_chat_arrow->move(design_ini_result.x + ui_vp_chatbox->x(), design_ini_result.y + ui_vp_chatbox->y());
+ ui_vp_chat_arrow->combo_resize(design_ini_result.width,
+ design_ini_result.height);
+ }
}
pos_size_type default_width = ao_app->get_element_dimensions(
@@ -2679,39 +2672,41 @@ void Courtroom::handle_ic_speaking()
if (emote_mod == 5 || emote_mod == 6) {
// Hide the desks
ui_vp_desk->hide();
- ui_vp_legacy_desk->hide();
// Obtain character information for our character
- QString f_char = m_chatmessage[CHAR_NAME];
- QString f_custom_theme = ao_app->get_char_shouts(f_char);
+ QString filename;
// I still hate this hardcoding. If we're on pos pro, hlp and wit, use prosecution_speedlines. Otherwise, defense_speedlines.
if (side == "pro" || side == "hlp" || side == "wit")
- ui_vp_speedlines->play("prosecution_speedlines", f_char, f_custom_theme);
+ filename = "prosecution_speedlines";
else
- ui_vp_speedlines->play("defense_speedlines", f_char, f_custom_theme);
+ filename = "defense_speedlines";
+ ui_vp_speedlines->load_image(filename, m_chatmessage[CHAR_NAME]);
}
// Check if this is a talking color (white text, etc.)
color_is_talking =
color_markdown_talking_list.at(m_chatmessage[TEXT_COLOR].toInt());
-
+ QString filename;
// If color is talking, and our state isn't already talking
if (color_is_talking && text_state == 1 &&
anim_state < 2)
{
// Stop the previous animation and play the talking animation
ui_vp_player_char->stop();
- ui_vp_player_char->play_talking(m_chatmessage[CHAR_NAME],
- m_chatmessage[EMOTE]);
+ ui_vp_player_char->set_play_once(false);
+ filename = "(b)" + m_chatmessage[EMOTE];
+ ui_vp_player_char->load_image(filename, m_chatmessage[CHAR_NAME], 0, false);
// Set the anim state accordingly
anim_state = 2;
}
- else if (anim_state < 3)
+ else if (anim_state < 3 &&
+ anim_state != 3) // Set it to idle as we're not on that already
{
// Stop the previous animation and play the idle animation
ui_vp_player_char->stop();
- ui_vp_player_char->play_idle(m_chatmessage[CHAR_NAME],
- m_chatmessage[EMOTE]);
+ ui_vp_player_char->set_play_once(false);
+ filename = "(a)" + m_chatmessage[EMOTE];
+ ui_vp_player_char->load_image(filename, m_chatmessage[CHAR_NAME], 0, false);
// Set the anim state accordingly
anim_state = 3;
}
@@ -2968,7 +2963,7 @@ void Courtroom::log_ic_text(QString p_name, QString p_showname,
{
chatlogpiece log_entry(p_name, p_showname, p_message, p_action, p_color);
ic_chatlog_history.append(log_entry);
- if (ao_app->get_auto_logging_enabled())
+ if (ao_app->get_auto_logging_enabled() && !ao_app->log_filename.isEmpty())
ao_app->append_to_file(log_entry.get_full(), ao_app->log_filename, true);
while (ic_chatlog_history.size() > log_maximum_blocks &&
@@ -3110,7 +3105,6 @@ void Courtroom::play_preanim(bool immediate)
{
QString f_char = m_chatmessage[CHAR_NAME];
QString f_preanim = m_chatmessage[PRE_EMOTE];
-
// all time values in char.inis are multiplied by a constant(time_mod) to get
// the actual time
int ao2_duration = ao_app->get_ao2_preanim_duration(f_char, f_preanim);
@@ -3133,11 +3127,12 @@ void Courtroom::play_preanim(bool immediate)
else
anim_state = 1;
preanim_done();
- qDebug() << "could not find " + anim_to_find;
+ qDebug() << "W: could not find " + anim_to_find;
return;
}
-
- ui_vp_player_char->play_pre(f_char, f_preanim, preanim_duration);
+ ui_vp_player_char->set_static_duration(preanim_duration);
+ ui_vp_player_char->set_play_once(true);
+ ui_vp_player_char->load_image(f_preanim, f_char, preanim_duration, true);
if (immediate)
anim_state = 4;
@@ -3154,6 +3149,7 @@ void Courtroom::play_preanim(bool immediate)
void Courtroom::preanim_done()
{
anim_state = 1;
+ qDebug() << "preanim over, anim_state set to 1";
handle_ic_speaking();
}
@@ -3202,6 +3198,8 @@ void Courtroom::start_chat_ticking()
ui_vp_chatbox->show();
ui_vp_message->show();
+ ui_vp_sticker->load_image(m_chatmessage[CHAR_NAME]);
+
if (m_chatmessage[ADDITIVE] != "1") {
ui_vp_message->clear();
real_tick_pos = 0;
@@ -3225,6 +3223,8 @@ void Courtroom::start_chat_ticking()
// means text is currently ticking
text_state = 1;
+
+ c_played = false;
}
void Courtroom::chat_tick()
@@ -3236,13 +3236,30 @@ void Courtroom::chat_tick()
// Due to our new text speed system, we always need to stop the timer now.
chat_tick_timer->stop();
+ ui_vp_player_char->set_static_duration(0);
+ QString filename;
if (tick_pos >= f_message.size()) {
text_state = 2;
if (anim_state < 3) {
- anim_state = 3;
- ui_vp_player_char->play_idle(m_chatmessage[CHAR_NAME],
- m_chatmessage[EMOTE]);
+ QStringList c_paths = {
+ ao_app->get_image_suffix(ao_app->get_character_path(m_chatmessage[CHAR_NAME], "(c)" + m_chatmessage[EMOTE])),
+ ao_app->get_image_suffix(ao_app->get_character_path(m_chatmessage[CHAR_NAME], "(c)/" + m_chatmessage[EMOTE]))
+ };
+ // if there is a (c) animation for this emote and we haven't played it already
+ if (file_exists(ui_vp_player_char->find_image(c_paths)) &&(!c_played)) {
+ anim_state = 5;
+ ui_vp_player_char->set_play_once(true);
+ filename = "(c)" + m_chatmessage[EMOTE];
+ c_played = true;
+ }
+ else {
+ anim_state = 3;
+ ui_vp_player_char->set_play_once(false);
+ filename = "(a)" + m_chatmessage[EMOTE];
+ }
+ ui_vp_player_char->load_image(filename, m_chatmessage[CHAR_NAME], 0,
+ false);
}
QString f_char;
QString f_custom_theme;
@@ -3250,7 +3267,11 @@ void Courtroom::chat_tick()
f_char = m_chatmessage[CHAR_NAME];
f_custom_theme = ao_app->get_chat(f_char);
}
- QString f_message_filtered = filter_ic_text(f_message, true, -1, m_chatmessage[TEXT_COLOR].toInt());
+ ui_vp_chat_arrow->load_image("chat_arrow",f_custom_theme); // Chat stopped being processed, indicate that.
+ additive_previous =
+ additive_previous +
+ filter_ic_text(f_message, true, -1, m_chatmessage[TEXT_COLOR].toInt());
+ QString f_message_filtered = filter_ic_text(f_message, true, -1, m_chatmessage[TEXT_COLOR].toInt());
for (int c = 0; c < max_colors; ++c) {
f_message_filtered = f_message_filtered.replace("$c" + QString::number(c), char_color_rgb_list.at(c).name(QColor::HexRgb));
}
@@ -3446,16 +3467,20 @@ void Courtroom::chat_tick()
// to avoid interrupting a non-interrupted preanim)
{
ui_vp_player_char->stop();
- ui_vp_player_char->play_talking(m_chatmessage[CHAR_NAME],
- m_chatmessage[EMOTE]);
+ ui_vp_player_char->set_play_once(false);
+ filename = "(b)" + m_chatmessage[EMOTE];
+ ui_vp_player_char->load_image(filename, m_chatmessage[CHAR_NAME], 0,
+ false);
anim_state = 2;
}
else if (!color_is_talking && anim_state < 3 &&
anim_state != 3) // Set it to idle as we're not on that already
{
ui_vp_player_char->stop();
- ui_vp_player_char->play_idle(m_chatmessage[CHAR_NAME],
- m_chatmessage[EMOTE]);
+ ui_vp_player_char->set_play_once(false);
+ filename = "(a)" + m_chatmessage[EMOTE];
+ ui_vp_player_char->load_image(filename, m_chatmessage[CHAR_NAME], 0,
+ false);
anim_state = 3;
}
// Continue ticking
@@ -3540,19 +3565,15 @@ void Courtroom::set_scene(QString f_desk_mod, QString f_side)
f_background = f_side;
f_desk_image = f_side + "_overlay";
}
-
- ui_vp_background->set_image(f_background);
- ui_vp_desk->set_image(f_desk_image);
- ui_vp_legacy_desk->set_legacy_desk(f_desk_image);
+ ui_vp_background->load_image(f_background);
+ ui_vp_desk->load_image(f_desk_image);
if (f_desk_mod == "0" ||
(f_desk_mod != "1" &&
(f_side == "jud" || f_side == "hld" || f_side == "hlp"))) {
ui_vp_desk->hide();
- ui_vp_legacy_desk->hide();
}
else {
- ui_vp_legacy_desk->hide();
ui_vp_desk->show();
}
}
@@ -3700,31 +3721,40 @@ void Courtroom::handle_song(QStringList *p_contents)
void Courtroom::handle_wtce(QString p_wtce, int variant)
{
QString sfx_file = "courtroom_sounds.ini";
-
+ QString sfx_name;
+ QString filename;
+ ui_vp_wtce->set_static_duration(wtce_static_time);
+ ui_vp_wtce->set_max_duration(wtce_max_time);
// witness testimony
if (p_wtce == "testimony1") {
- sfx_player->play(ao_app->get_sfx("witness_testimony"));
- ui_vp_wtce->play("witnesstestimony", "", "", 1500);
- ui_vp_testimony->play("testimony");
+ sfx_name = "witness_testimony";
+ filename = "witnesstestimony";
+ ui_vp_testimony->load_image("testimony", "");
}
// cross examination
else if (p_wtce == "testimony2") {
- sfx_player->play(ao_app->get_sfx("cross_examination"));
- ui_vp_wtce->play("crossexamination", "", "", 1500);
+ sfx_name = "cross_examination";
+ filename = "crossexamination";
ui_vp_testimony->stop();
}
else if (p_wtce == "judgeruling") {
+ ui_vp_wtce->set_static_duration(verdict_static_time);
+ ui_vp_wtce->set_max_duration(verdict_max_time);
if (variant == 0) {
- sfx_player->play(ao_app->get_sfx("not_guilty"));
- ui_vp_wtce->play("notguilty", "", "", 3000);
+ sfx_name = "not_guilty";
+ filename = "notguilty";
ui_vp_testimony->stop();
}
else if (variant == 1) {
- sfx_player->play(ao_app->get_sfx("guilty"));
- ui_vp_wtce->play("guilty", "", "", 3000);
+ sfx_name = "guilty";
+ filename = "guilty";
ui_vp_testimony->stop();
}
}
+ QString bg_misc = ao_app->read_design_ini("misc", ao_app->get_background_path("design.ini"));
+ sfx_player->play(ao_app->get_sfx(sfx_name, bg_misc));
+ ui_vp_wtce->load_image(filename, "", bg_misc);
+ ui_vp_wtce->set_play_once(true);
}
void Courtroom::set_hp_bar(int p_bar, int p_state)
@@ -3795,9 +3825,6 @@ void Courtroom::on_ooc_return_pressed()
{
QString ooc_message = ui_ooc_chat_message->text();
- if (ooc_message == "" || ui_ooc_chat_name->text() == "")
- return;
-
if (ooc_message.startsWith("/pos")) {
if (ooc_message == "/pos jud") {
toggle_judge_buttons(true);
@@ -4322,28 +4349,28 @@ void Courtroom::set_sfx_dropdown()
ui_sfx_remove->hide();
return;
}
- QStringList soundlist = ao_app->get_list_file(
+ // Initialzie character sound list first. Will be empty if not found.
+ sound_list = ao_app->get_list_file(
ao_app->get_character_path(current_char, "soundlist.ini"));
- if (soundlist.size() <= 0) {
- soundlist = ao_app->get_list_file(
- ao_app->get_theme_path("character_soundlist.ini"));
- if (soundlist.size() <= 0) {
- soundlist = ao_app->get_list_file(
- ao_app->get_default_theme_path("character_soundlist.ini"));
- }
- }
+ // Append default sound list after the character sound list.
+ sound_list += ao_app->get_list_file(
+ ao_app->get_base_path() + "soundlist.ini");
- if (soundlist.size() <= 0) {
- ui_sfx_dropdown->hide();
- ui_sfx_remove->hide();
- return;
+ QStringList display_sounds;
+ for (QString sound : sound_list) {
+ QStringList unpacked = sound.split("=");
+ QString display = unpacked[0].trimmed();
+ if (unpacked.size() > 1)
+ display = unpacked[1].trimmed();
+
+ display_sounds.append(display);
}
- soundlist.prepend("Nothing");
- soundlist.prepend("Default");
+ display_sounds.prepend("Nothing");
+ display_sounds.prepend("Default");
ui_sfx_dropdown->show();
- ui_sfx_dropdown->addItems(soundlist);
+ ui_sfx_dropdown->addItems(display_sounds);
ui_sfx_dropdown->setCurrentIndex(0);
ui_sfx_remove->hide();
ui_sfx_dropdown->blockSignals(false);
@@ -4351,37 +4378,16 @@ void Courtroom::set_sfx_dropdown()
void Courtroom::on_sfx_dropdown_changed(int p_index)
{
+ UNUSED(p_index);
ui_ic_chat_message->setFocus();
+ ui_sfx_remove->hide();
+ custom_sfx = "";
+}
- QStringList soundlist;
- for (int i = 2; i < ui_sfx_dropdown->count(); ++i) {
- QString entry = ui_sfx_dropdown->itemText(i);
- if (!soundlist.contains(entry))
- soundlist.append(entry);
- }
-
- QStringList defaultlist =
- ao_app->get_list_file(ao_app->get_theme_path("character_soundlist.ini"));
- if (defaultlist.size() <= 0) {
- defaultlist = ao_app->get_list_file(
- ao_app->get_default_theme_path("character_soundlist.ini"));
- }
-
- if (defaultlist.size() > 0 &&
- defaultlist.toSet().subtract(soundlist.toSet()).size() >
- 0) // There's a difference from the default configuration
- ao_app->write_to_file(
- soundlist.join("\n"),
- ao_app->get_character_path(current_char,
- "soundlist.ini")); // Create a new sound list
-
- ui_sfx_dropdown->blockSignals(true);
- ui_sfx_dropdown->setCurrentIndex(p_index);
- ui_sfx_dropdown->blockSignals(false);
- if (p_index > 1)
- ui_sfx_remove->show();
- else
- ui_sfx_remove->hide();
+void Courtroom::on_sfx_dropdown_custom(QString p_sfx)
+{
+ ui_sfx_remove->show();
+ custom_sfx = p_sfx;
}
void Courtroom::on_sfx_context_menu_requested(const QPoint &pos)
@@ -4394,40 +4400,27 @@ void Courtroom::on_sfx_context_menu_requested(const QPoint &pos)
menu->addAction(QString("Edit " + current_char + "/soundlist.ini"), this,
SLOT(on_sfx_edit_requested()));
else
- menu->addAction(QString("Edit theme's character_soundlist.ini"), this,
+ menu->addAction(QString("Edit global soundlist.ini"), this,
SLOT(on_sfx_edit_requested()));
- if (ui_sfx_dropdown->currentIndex() > 1)
- menu->addAction(QString("Remove " + ui_sfx_dropdown->itemText(
- ui_sfx_dropdown->currentIndex())),
- this, SLOT(on_sfx_remove_clicked()));
+ if (!custom_sfx.isEmpty())
+ menu->addAction(QString("Clear Edit Text"), this, SLOT(on_sfx_remove_clicked()));
menu->popup(ui_sfx_dropdown->mapToGlobal(pos));
}
+
void Courtroom::on_sfx_edit_requested()
{
QString p_path = ao_app->get_character_path(current_char, "soundlist.ini");
if (!file_exists(p_path)) {
- p_path = ao_app->get_theme_path("character_soundlist.ini");
- if (!file_exists(p_path)) {
- p_path = ao_app->get_default_theme_path("character_soundlist.ini");
- if (!file_exists(p_path)) {
- return;
- }
+ p_path = ao_app->get_base_path() + "soundlist.ini";
}
- }
QDesktopServices::openUrl(QUrl::fromLocalFile(p_path));
}
void Courtroom::on_sfx_remove_clicked()
{
- if (ui_sfx_dropdown->count() <= 0) {
- ui_sfx_remove->hide(); // We're not supposed to see it. Do this or the
- // client will crash
- return;
- }
- if (ui_sfx_dropdown->currentIndex() > 1) {
- ui_sfx_dropdown->removeItem(ui_sfx_dropdown->currentIndex());
- on_sfx_dropdown_changed(0); // Reset back to original
- }
+ ui_sfx_remove->hide();
+ ui_sfx_dropdown->setCurrentIndex(0);
+ custom_sfx = "";
}
void Courtroom::set_effects_dropdown()
@@ -4530,19 +4523,21 @@ bool Courtroom::effects_dropdown_find_and_set(QString effect)
QString Courtroom::get_char_sfx()
{
- QString sfx = ui_sfx_dropdown->itemText(ui_sfx_dropdown->currentIndex());
- if (sfx == "Nothing")
- return "1";
- if (sfx != "" && sfx != "Default")
- return sfx;
- return ao_app->get_sfx_name(current_char, current_emote);
+ if (!custom_sfx.isEmpty())
+ return custom_sfx;
+ int index = ui_sfx_dropdown->currentIndex();
+ if (index == 0) // Default
+ return ao_app->get_sfx_name(current_char, current_emote);
+ if (index == 1) // Nothing
+ return "1";
+ QString sfx = sound_list[index-2].split("=")[0].trimmed();
+ if (sfx == "")
+ return "1";
+ return sfx;
}
int Courtroom::get_char_sfx_delay()
{
- // QString sfx = ui_sfx_dropdown->itemText(ui_sfx_dropdown->currentIndex());
- // if (sfx != "" && sfx != "Default")
- // return 0; //todo: a way to define this
return ao_app->get_sfx_delay(current_char, current_emote);
}
@@ -4745,12 +4740,12 @@ void Courtroom::music_stop()
void Courtroom::on_area_list_double_clicked(QTreeWidgetItem *p_item, int column)
{
column = 0; // The metadata
+ UNUSED(column); // so gcc shuts up
QString p_area = p_item->text(0);
QStringList packet_contents;
packet_contents.append(p_area);
packet_contents.append(QString::number(m_cid));
- qDebug() << packet_contents;
ao_app->send_server_packet(new AOPacket("MC", packet_contents), false);
}
@@ -4982,18 +4977,18 @@ void Courtroom::set_text_color_dropdown()
QColor color =
ao_app->get_chat_color("c" + QString::number(c), current_char);
color_rgb_list.append(color);
- color_markdown_start_list.append(ao_app->get_chat_markdown(
+ color_markdown_start_list.append(ao_app->get_chat_markup(
"c" + QString::number(c) + "_start", current_char));
- color_markdown_end_list.append(ao_app->get_chat_markdown(
+ color_markdown_end_list.append(ao_app->get_chat_markup(
"c" + QString::number(c) + "_end", current_char));
color_markdown_remove_list.append(
- ao_app->get_chat_markdown("c" + QString::number(c) + "_remove",
- current_char) == "1");
+ ao_app->get_chat_markup("c" + QString::number(c) + "_remove",
+ current_char) == "1");
color_markdown_talking_list.append(
- ao_app->get_chat_markdown("c" + QString::number(c) + "_talking",
- current_char) != "0");
+ ao_app->get_chat_markup("c" + QString::number(c) + "_talking",
+ current_char) != "0");
- QString color_name = ao_app->get_chat_markdown(
+ QString color_name = ao_app->get_chat_markup(
"c" + QString::number(c) + "_name", current_char);
if (color_name.isEmpty()) // Not defined
{
@@ -5244,12 +5239,16 @@ void Courtroom::on_showname_enable_clicked()
void Courtroom::regenerate_ic_chatlog()
{
ui_ic_chatlog->clear();
+ last_ic_message = "";
foreach (chatlogpiece item, ic_chatlog_history) {
- append_ic_text(item.get_message(),
- ui_showname_enable->isChecked() ? item.get_showname()
- : item.get_name(),
+ QString message = item.get_message();
+ QString name = ui_showname_enable->isChecked() ? item.get_showname()
+ : item.get_name();
+ append_ic_text(message,
+ name,
item.get_action(), item.get_chat_color(),
item.get_datetime().toLocalTime());
+ last_ic_message = name + ":" + message;
}
}
diff --git a/src/demoserver.cpp b/src/demoserver.cpp
new file mode 100644
index 00000000..fcb5003d
--- /dev/null
+++ b/src/demoserver.cpp
@@ -0,0 +1,304 @@
+#include "demoserver.h"
+#include "lobby.h"
+
+DemoServer::DemoServer(QObject *parent) : QObject(parent)
+{
+ timer = new QTimer(this);
+ timer->setTimerType(Qt::PreciseTimer);
+ timer->setSingleShot(true);
+
+ tcp_server = new QTcpServer(this);
+ connect(tcp_server, &QTcpServer::newConnection, this, &DemoServer::accept_connection);
+ connect(timer, &QTimer::timeout, this, &DemoServer::playback);
+}
+
+void DemoServer::start_server()
+{
+ if (server_started) return;
+ if (!tcp_server->listen(QHostAddress::LocalHost, 0)) {
+ qCritical() << "Could not start demo playback server...";
+ qDebug() << tcp_server->errorString();
+ return;
+ }
+ this->port = tcp_server->serverPort();
+ qDebug() << "Server started";
+ server_started = true;
+}
+
+void DemoServer::destroy_connection()
+{
+ QTcpSocket* temp_socket = tcp_server->nextPendingConnection();
+ connect(temp_socket, &QAbstractSocket::disconnected, temp_socket, &QObject::deleteLater);
+ temp_socket->disconnectFromHost();
+ return;
+}
+
+void DemoServer::accept_connection()
+{
+ QString path = QFileDialog::getOpenFileName(nullptr, tr("Load Demo"), "logs/", tr("Demo Files (*.demo)"));
+ if (path.isEmpty())
+ {
+ destroy_connection();
+ return;
+ }
+ load_demo(path);
+
+ if (demo_data.isEmpty())
+ {
+ destroy_connection();
+ return;
+ }
+
+ if (demo_data.head().startsWith("SC#"))
+ {
+ sc_packet = demo_data.dequeue();
+ AOPacket sc(sc_packet);
+ num_chars = sc.get_contents().length();
+ }
+ else
+ {
+ sc_packet = "SC#%";
+ num_chars = 0;
+ }
+
+ if (client_sock) {
+ // Client is already connected...
+ qDebug() << "Multiple connections to demo server disallowed.";
+ QTcpSocket* temp_socket = tcp_server->nextPendingConnection();
+ connect(temp_socket, &QAbstractSocket::disconnected, temp_socket, &QObject::deleteLater);
+ temp_socket->disconnectFromHost();
+ return;
+ }
+ client_sock = tcp_server->nextPendingConnection();
+ connect(client_sock, &QAbstractSocket::disconnected, this, &DemoServer::client_disconnect);
+ connect(client_sock, &QAbstractSocket::readyRead, this, &DemoServer::recv_data);
+ client_sock->write("decryptor#NOENCRYPT#%");
+}
+
+void DemoServer::recv_data()
+{
+ QString in_data = QString::fromUtf8(client_sock->readAll());
+
+ // Copypasted from NetworkManager
+ if (!in_data.endsWith("%")) {
+ partial_packet = true;
+ temp_packet += in_data;
+ return;
+ }
+
+ else {
+ if (partial_packet) {
+ in_data = temp_packet + in_data;
+ temp_packet = "";
+ partial_packet = false;
+ }
+ }
+
+ QStringList packet_list =
+ in_data.split("%", QString::SplitBehavior(QString::SkipEmptyParts));
+
+ for (QString packet : packet_list) {
+ AOPacket ao_packet(packet);
+ handle_packet(ao_packet);
+ }
+}
+
+void DemoServer::handle_packet(AOPacket packet)
+{
+ packet.net_decode();
+
+ // This code is literally a barebones AO server
+ // It is wise to do it this way, because I can
+ // avoid touching any of this disgusting shit
+ // related to hardcoding this stuff in.
+
+ // Also, at some point, I will make akashit
+ // into a shared library.
+
+ QString header = packet.get_header();
+ QStringList contents = packet.get_contents();
+
+ if (header == "HI") {
+ client_sock->write("ID#0#DEMOINTERNAL#0#%");
+ }
+ else if (header == "ID") {
+ QStringList feature_list = {
+ "noencryption", "yellowtext", "prezoom",
+ "flipping", "customobjections", "fastloading",
+ "deskmod", "evidence", "cccc_ic_support",
+ "arup", "casing_alerts", "modcall_reason",
+ "looping_sfx", "additive", "effects",
+ "y_offset", "expanded_desk_mods"};
+ client_sock->write("PN#0#1#%");
+ client_sock->write("FL#");
+ client_sock->write(feature_list.join('#').toUtf8());
+ client_sock->write("#%");
+ }
+ else if (header == "askchaa") {
+ client_sock->write("SI#");
+ client_sock->write(QString::number(num_chars).toUtf8());
+ client_sock->write("#0#1#%");
+ }
+ else if (header == "RC") {
+ client_sock->write(sc_packet.toUtf8());
+ }
+ else if (header == "RM") {
+ client_sock->write("SM#%");
+ }
+ else if (header == "RD") {
+ client_sock->write("DONE#%");
+ }
+ else if (header == "CC") {
+ client_sock->write("PV#0#CID#-1#%");
+ client_sock->write("CT#DEMO#Demo file loaded. Send /play or > in OOC to begin playback.#1#%");
+ }
+ else if (header == "CT") {
+ if (contents[1].startsWith("/load"))
+ {
+ QString path = QFileDialog::getOpenFileName(nullptr, tr("Load Demo"), "logs/", tr("Demo Files (*.demo)"));
+ if (path.isEmpty())
+ return;
+ load_demo(path);
+ client_sock->write("CT#DEMO#Demo file loaded. Send /play or > in OOC to begin playback.#1#%");
+ }
+ else if (contents[1].startsWith("/play") || contents[1] == ">")
+ {
+ if (timer->interval() != 0 && !timer->isActive())
+ {
+ timer->start();
+ client_sock->write("CT#DEMO#Resuming playback.#1#%");
+ }
+ else
+ {
+ if (demo_data.isEmpty() && p_path != "")
+ load_demo(p_path);
+ playback();
+ }
+ }
+ else if (contents[1].startsWith("/pause") || contents[1] == "|")
+ {
+ int timeleft = timer->remainingTime();
+ timer->stop();
+ timer->setInterval(timeleft);
+ client_sock->write("CT#DEMO#Pausing playback.#1#%");
+ }
+ else if (contents[1].startsWith("/max_wait"))
+ {
+ QStringList args = contents[1].split(" ");
+ if (args.size() > 1)
+ {
+ bool ok;
+ int p_max_wait = args.at(1).toInt(&ok);
+ if (ok)
+ {
+ if (p_max_wait < 0)
+ p_max_wait = -1;
+ max_wait = p_max_wait;
+ client_sock->write("CT#DEMO#Setting max_wait to ");
+ client_sock->write(QString::number(max_wait).toUtf8());
+ client_sock->write(" milliseconds.#1#%");
+ }
+ else
+ {
+ client_sock->write("CT#DEMO#Not a valid integer!#1#%");
+ }
+ }
+ else
+ {
+ client_sock->write("CT#DEMO#Current max_wait is ");
+ client_sock->write(QString::number(max_wait).toUtf8());
+ client_sock->write(" milliseconds.#1#%");
+ }
+ }
+ else if (contents[1].startsWith("/min_wait"))
+ {
+ QStringList args = contents[1].split(" ");
+ if (args.size() > 1)
+ {
+ bool ok;
+ int p_min_wait = args.at(1).toInt(&ok);
+ if (ok)
+ {
+ if (p_min_wait < 0)
+ p_min_wait = -1;
+ min_wait = p_min_wait;
+ client_sock->write("CT#DEMO#Setting min_wait to ");
+ client_sock->write(QString::number(min_wait).toUtf8());
+ client_sock->write(" milliseconds.#1#%");
+ }
+ else
+ {
+ client_sock->write("CT#DEMO#Not a valid integer!#1#%");
+ }
+ }
+ else
+ {
+ client_sock->write("CT#DEMO#Current min_wait is ");
+ client_sock->write(QString::number(min_wait).toUtf8());
+ client_sock->write(" milliseconds.#1#%");
+ }
+ }
+ else if (contents[1].startsWith("/help"))
+ {
+ client_sock->write("CT#DEMO#Available commands:\nload, play, pause, max_wait, min_wait, help#1#%");
+ }
+ }
+}
+
+void DemoServer::load_demo(QString filename)
+{
+ QFile demo_file(filename);
+ demo_file.open(QIODevice::ReadOnly);
+ if (!demo_file.isOpen())
+ return;
+ demo_data.clear();
+ p_path = filename;
+ QTextStream demo_stream(&demo_file);
+ QString line = demo_stream.readLine();
+ while (!line.isNull()) {
+ if (!line.endsWith("%")) {
+ line += "\n";
+ }
+ demo_data.enqueue(line);
+ line = demo_stream.readLine();
+ }
+}
+
+void DemoServer::playback()
+{
+ if (demo_data.isEmpty())
+ return;
+
+ QString current_packet = demo_data.dequeue();
+ // We reset the elapsed time with this packet
+ if (current_packet.startsWith("MS#"))
+ elapsed_time = 0;
+
+ while (!current_packet.startsWith("wait") && !demo_data.isEmpty()) {
+ client_sock->write(current_packet.toUtf8());
+ current_packet = demo_data.dequeue();
+ }
+ if (!demo_data.isEmpty()) {
+ AOPacket wait_packet = AOPacket(current_packet);
+
+ int duration = wait_packet.get_contents().at(0).toInt();
+ if (max_wait != -1 && duration + elapsed_time > max_wait)
+ duration = qMax(0, max_wait - elapsed_time);
+ // We use elapsed_time to make sure that the packet we're using min_wait on is "priority" (e.g. IC)
+ if (elapsed_time == 0 && min_wait != -1 && duration < min_wait)
+ duration = min_wait;
+ elapsed_time += duration;
+ timer->start(duration);
+ }
+ else
+ {
+ client_sock->write("CT#DEMO#Reached the end of the demo file. Send /play or > in OOC to restart, or /load to open a new file.#1#%");
+ timer->setInterval(0);
+ }
+}
+
+void DemoServer::client_disconnect()
+{
+ client_sock->deleteLater();
+ client_sock = nullptr;
+}
diff --git a/src/lobby.cpp b/src/lobby.cpp
index 954c30a8..4528dc72 100644
--- a/src/lobby.cpp
+++ b/src/lobby.cpp
@@ -3,6 +3,7 @@
#include "aoapplication.h"
#include "aosfxplayer.h"
#include "debug_functions.h"
+#include "demoserver.h"
#include "networkmanager.h"
#include <QImageReader>
@@ -28,6 +29,7 @@ Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow()
ui_server_list = new QTreeWidget(this);
ui_server_list->setHeaderLabels({"#", "Name"}); //, "Players"});
ui_server_list->hideColumn(0);
+ ui_server_list->setHeaderHidden(true);
ui_server_search = new QLineEdit(this);
ui_server_search->setFrame(false);
@@ -438,7 +440,15 @@ void Lobby::on_server_list_clicked(QTreeWidgetItem *p_item, int column)
ui_connect->setEnabled(false);
- ao_app->net_manager->connect_to_server(f_server);
+ if (f_server.port == 99999 && f_server.ip == "127.0.0.1") {
+ // Demo playback server selected
+ ao_app->demo_server->start_server();
+ server_type demo_server;
+ demo_server.ip = "127.0.0.1";
+ demo_server.port = ao_app->demo_server->port;
+ ao_app->net_manager->connect_to_server(demo_server);
+ }
+ else ao_app->net_manager->connect_to_server(f_server);
}
}
diff --git a/src/networkmanager.cpp b/src/networkmanager.cpp
index cf89d0ab..5e29e219 100644
--- a/src/networkmanager.cpp
+++ b/src/networkmanager.cpp
@@ -131,7 +131,7 @@ void NetworkManager::on_srv_lookup()
qDebug() << "Connecting to " << record.target() << ":" << record.port();
#endif
ms_socket->connectToHost(record.target(), record.port());
- QTime timer;
+ QElapsedTimer timer;
timer.start();
do {
ao_app->processEvents();
diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp
index 6865987c..2da6981c 100644
--- a/src/packet_distribution.cpp
+++ b/src/packet_distribution.cpp
@@ -102,6 +102,19 @@ end:
delete p_packet;
}
+void AOApplication::append_to_demofile(QString packet_string)
+{
+ if (get_auto_logging_enabled() && !log_filename.isEmpty())
+ {
+ QString path = log_filename.left(log_filename.size()).replace(".log", ".demo");
+ append_to_file(packet_string, path, true);
+ if (!demo_timer.isValid())
+ demo_timer.start();
+ else
+ append_to_file("wait#"+ QString::number(demo_timer.restart()) + "#%", path, true);
+ }
+}
+
void AOApplication::server_packet_received(AOPacket *p_packet)
{
p_packet->net_decode();
@@ -164,6 +177,8 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
else
w_courtroom->append_server_chatmessage(f_contents.at(0),
f_contents.at(1), "0");
+
+ append_to_demofile(p_packet->to_string(true));
}
}
else if (header == "FL") {
@@ -232,7 +247,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
evidence_list_size = f_contents.at(1).toInt();
music_list_size = f_contents.at(2).toInt();
- if (char_list_size < 1 || evidence_list_size < 0 || music_list_size < 0)
+ if (char_list_size < 0 || evidence_list_size < 0 || music_list_size < 0)
goto end;
loaded_chars = 0;
@@ -255,7 +270,6 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
server_name = info.name;
server_address =
QString("%1:%2").arg(info.ip, QString::number(info.port));
- qDebug() << server_address;
window_title += ": " + server_name;
}
}
@@ -265,7 +279,6 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
server_name = info.name;
server_address =
QString("%1:%2").arg(info.ip, QString::number(info.port));
- qDebug() << server_address;
window_title += ": " + server_name;
}
}
@@ -283,7 +296,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
// Remove any characters not accepted in folder names for the server_name
// here
- if (AOApplication::get_auto_logging_enabled()) {
+ if (AOApplication::get_auto_logging_enabled() && server_name != "Demo playback") {
this->log_filename = QDateTime::currentDateTime().toUTC().toString(
"'logs/" + server_name.remove(QRegExp("[\\\\/:*?\"<>|\']")) +
"/'yyyy-MM-dd hh-mm-ss t'.log'");
@@ -292,6 +305,8 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
QDateTime::currentDateTime().toUTC().toString(),
log_filename, true);
}
+ else
+ this->log_filename = "";
QCryptographicHash hash(QCryptographicHash::Algorithm::Sha256);
hash.addData(server_address.toUtf8());
@@ -312,7 +327,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
}
else if (header == "SC") {
- if (!courtroom_constructed)
+ if (!courtroom_constructed || courtroom_loaded)
goto end;
for (int n_element = 0; n_element < f_contents.size(); ++n_element) {
@@ -344,9 +359,10 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
}
send_server_packet(new AOPacket("RM#%"));
+ append_to_demofile(p_packet->to_string(true));
}
else if (header == "SM") {
- if (!courtroom_constructed)
+ if (!courtroom_constructed || courtroom_loaded)
goto end;
bool musics_time = false;
@@ -445,6 +461,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
2) // We have a pos included in the background packet!
w_courtroom->set_side(f_contents.at(1));
w_courtroom->set_background(f_contents.at(0), f_contents.size() >= 2);
+ append_to_demofile(p_packet->to_string(true));
}
}
else if (header == "SP") {
@@ -454,6 +471,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
if (courtroom_constructed) // We were sent a "set position" packet
{
w_courtroom->set_side(f_contents.at(0));
+ append_to_demofile(p_packet->to_string(true));
}
}
else if (header == "SD") // Send pos dropdown
@@ -475,27 +493,37 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
}
else if (header == "MS") {
if (courtroom_constructed && courtroom_loaded)
+ {
w_courtroom->chatmessage_enqueue(p_packet->get_contents());
+ append_to_demofile(p_packet->to_string(true));
+ }
}
else if (header == "MC") {
if (courtroom_constructed && courtroom_loaded)
+ {
w_courtroom->handle_song(&p_packet->get_contents());
+ append_to_demofile(p_packet->to_string(true));
+ }
}
else if (header == "RT") {
if (f_contents.size() < 1)
goto end;
if (courtroom_constructed) {
- if (f_contents.size() == 1)
- w_courtroom->handle_wtce(f_contents.at(0), 0);
- else if (f_contents.size() == 2) {
- w_courtroom->handle_wtce(f_contents.at(0), f_contents.at(1).toInt());
+ if (f_contents.size() == 1)
+ w_courtroom->handle_wtce(f_contents.at(0), 0);
+ else if (f_contents.size() == 2) {
+ w_courtroom->handle_wtce(f_contents.at(0), f_contents.at(1).toInt());
+ append_to_demofile(p_packet->to_string(true));
}
}
}
else if (header == "HP") {
if (courtroom_constructed && f_contents.size() > 1)
+ {
w_courtroom->set_hp_bar(f_contents.at(0).toInt(),
f_contents.at(1).toInt());
+ append_to_demofile(p_packet->to_string(true));
+ }
}
else if (header == "LE") {
if (courtroom_constructed) {
diff --git a/src/path_functions.cpp b/src/path_functions.cpp
index c6c73a8b..728f5a40 100644
--- a/src/path_functions.cpp
+++ b/src/path_functions.cpp
@@ -65,6 +65,16 @@ QString AOApplication::get_character_path(QString p_char, QString p_file)
return get_case_sensitive_path(path);
}
+QString AOApplication::get_misc_path(QString p_misc, QString p_file)
+{
+ QString path = get_base_path() + "misc/" + p_misc + "/" + p_file;
+#ifndef CASE_SENSITIVE_FILESYSTEM
+ return path;
+#else
+ return get_case_sensitive_path(path);
+#endif
+}
+
QString AOApplication::get_sounds_path(QString p_file)
{
QString path = get_base_path() + "sounds/general/" + p_file;
diff --git a/src/text_file_functions.cpp b/src/text_file_functions.cpp
index 1ea27bff..0128f565 100644
--- a/src/text_file_functions.cpp
+++ b/src/text_file_functions.cpp
@@ -52,6 +52,12 @@ int AOApplication::stay_time()
return result;
}
+int AOApplication::get_chat_ratelimit()
+{
+ int result = configini->value("chat_ratelimit", 300).toInt();
+ return result;
+}
+
bool AOApplication::get_log_goes_downwards()
{
QString result =
@@ -61,8 +67,7 @@ bool AOApplication::get_log_goes_downwards()
bool AOApplication::get_log_newline()
{
- QString result =
- configini->value("log_newline", "false").value<QString>();
+ QString result = configini->value("log_newline", "false").value<QString>();
return result.startsWith("true");
}
@@ -74,8 +79,7 @@ int AOApplication::get_log_margin()
bool AOApplication::get_log_timestamp()
{
- QString result =
- configini->value("log_timestamp", "false").value<QString>();
+ QString result = configini->value("log_timestamp", "false").value<QString>();
return result.startsWith("true");
}
@@ -178,6 +182,10 @@ bool AOApplication::write_to_file(QString p_text, QString p_file, bool make_dir)
bool AOApplication::append_to_file(QString p_text, QString p_file,
bool make_dir)
{
+ if(!file_exists(p_file)) //Don't create a newline if file didn't exist before now
+ {
+ return write_to_file(p_text, p_file, make_dir);
+ }
QString path = QFileInfo(p_file).path();
// Create the dir if it doesn't exist yet
if (make_dir) {
@@ -249,6 +257,13 @@ QVector<server_type> AOApplication::read_serverlist_txt()
f_server_list.append(f_server);
}
+ server_type demo_server;
+ demo_server.ip = "127.0.0.1";
+ demo_server.port = 99999;
+ demo_server.name = "Demo playback";
+ demo_server.desc = "Play back demos you have previously recorded";
+ f_server_list.append(demo_server);
+
return f_server_list;
}
@@ -265,6 +280,13 @@ QString AOApplication::read_design_ini(QString p_identifier,
}
}
+Qt::TransformationMode AOApplication::get_scaling(QString p_scaling)
+{
+ if (p_scaling == "smooth")
+ return Qt::SmoothTransformation;
+ return Qt::FastTransformation;
+}
+
QPoint AOApplication::get_button_spacing(QString p_identifier, QString p_file)
{
QString design_ini_path = get_theme_path(p_file);
@@ -298,28 +320,12 @@ pos_size_type AOApplication::get_element_dimensions(QString p_identifier,
QString p_file,
QString p_char)
{
- QString char_ini_path =
- get_base_path() + "misc/" + get_chat(p_char) + "/" + p_file;
- QString design_ini_path = get_theme_path(p_file);
- QString default_path = get_default_theme_path(p_file);
- QString f_result = read_design_ini(p_identifier, char_ini_path);
-
pos_size_type return_value;
-
return_value.x = 0;
return_value.y = 0;
return_value.width = -1;
return_value.height = -1;
-
- if (f_result == "") {
- f_result = read_design_ini(p_identifier, design_ini_path);
- if (f_result == "") {
- f_result = read_design_ini(p_identifier, default_path);
-
- if (f_result == "")
- return return_value;
- }
- }
+ QString f_result = get_design_element(p_identifier, p_file, p_char);
QStringList sub_line_elements = f_result.split(",");
@@ -336,17 +342,16 @@ pos_size_type AOApplication::get_element_dimensions(QString p_identifier,
QString AOApplication::get_design_element(QString p_identifier, QString p_file,
QString p_char)
{
- QString char_ini_path =
- get_base_path() + "misc/" + get_chat(p_char) + "/" + p_file;
- QString design_ini_path = get_theme_path(p_file);
- QString default_path = get_default_theme_path(p_file);
- QString f_result = read_design_ini(p_identifier, char_ini_path);
- if (f_result == "") {
- f_result = read_design_ini(p_identifier, design_ini_path);
- if (f_result == "")
- f_result = read_design_ini(p_identifier, default_path);
+ QStringList paths{get_theme_path("misc/" + get_chat(p_char) + "/" +
+ p_file), // user theme overrides base/misc
+ get_base_path() + "misc/" + get_chat(p_char) + "/" + p_file,
+ get_theme_path(p_file), get_default_theme_path(p_file)};
+ for (const QString &path : paths) {
+ QString value = read_design_ini(p_identifier, path);
+ if (!value.isEmpty())
+ return value;
}
- return f_result;
+ return "";
}
QString AOApplication::get_font_name(QString p_identifier, QString p_file)
{
@@ -466,34 +471,30 @@ QString AOApplication::get_tagged_stylesheet(QString target_tag, QString p_file)
return f_text;
}
-QString AOApplication::get_chat_markdown(QString p_identifier, QString p_chat)
+QString AOApplication::get_chat_markup(QString p_identifier, QString p_chat)
{
- QString design_ini_path =
- get_base_path() + "misc/" + get_chat(p_chat) + "/config.ini";
- QString default_path = get_base_path() + "misc/default/config.ini";
- QString f_result = read_design_ini(p_identifier, design_ini_path);
+ QStringList paths{get_theme_path("misc/" + get_chat(p_chat) + "/config.ini"),
+ get_base_path() + "misc/" + get_chat(p_chat) +
+ "/config.ini",
+ get_base_path() + "misc/default/config.ini",
+ get_theme_path("misc/default/config.ini")};
- if (f_result == "")
- f_result = read_design_ini(p_identifier, default_path);
+ for (const QString &path : paths) {
+ QString value = read_design_ini(p_identifier, path);
+ if (!value.isEmpty()) {
+ return value.toLatin1();
+ }
+ }
- return f_result.toLatin1();
+ return "";
}
QColor AOApplication::get_chat_color(QString p_identifier, QString p_chat)
{
QColor return_color(255, 255, 255);
-
- QString design_ini_path =
- get_base_path() + "misc/" + get_chat(p_chat) + "/config.ini";
- QString default_path = get_base_path() + "misc/default/config.ini";
- QString f_result = read_design_ini(p_identifier, design_ini_path);
-
- if (f_result == "") {
- f_result = read_design_ini(p_identifier, default_path);
-
- if (f_result == "")
- return return_color;
- }
+ QString f_result = get_chat_markup(p_identifier, p_chat);
+ if (f_result == "")
+ return return_color;
QStringList color_list = f_result.split(",");
@@ -507,23 +508,21 @@ QColor AOApplication::get_chat_color(QString p_identifier, QString p_chat)
return return_color;
}
-QString AOApplication::get_sfx(QString p_identifier)
+QString AOApplication::get_sfx(QString p_identifier, QString p_misc)
{
- QString design_ini_path = get_theme_path("courtroom_sounds.ini");
- QString default_path = get_default_theme_path("courtroom_sounds.ini");
- QString f_result = read_design_ini(p_identifier, design_ini_path);
+ QStringList paths{get_theme_path("misc/" + p_misc + "/courtroom_sounds.ini"),
+ get_misc_path(p_misc, "courtroom_sounds.ini"),
+ get_theme_path("courtroom_sounds.ini"),
+ get_default_theme_path("courtroom_sounds.ini")};
QString return_sfx = "";
- if (f_result == "") {
- f_result = read_design_ini(p_identifier, default_path);
-
- if (f_result == "")
- return return_sfx;
+ for (const QString &path : paths) {
+ QString value = read_design_ini(p_identifier, path);
+ if (!value.isEmpty()) {
+ return value.toLatin1();
+ }
}
-
- return_sfx = f_result;
-
return return_sfx;
}
@@ -650,6 +649,37 @@ QString AOApplication::get_blips(QString p_char)
return f_result;
}
+QString AOApplication::get_emote_property(QString p_char, QString p_emote,
+ QString p_property)
+{
+ QString f_result =
+ read_char_ini(p_char, p_emote, p_property); // per-emote override
+ if (f_result == "")
+ f_result = read_char_ini(p_char, p_property,
+ "Options"); // global for this character
+ return f_result;
+}
+
+Qt::TransformationMode AOApplication::get_misc_scaling(QString p_miscname)
+{
+ if (p_miscname != "") {
+ QString misc_transform_mode = read_design_ini(
+ "scaling", get_theme_path("misc/" + p_miscname + "/config.ini"));
+ if (misc_transform_mode == "")
+ misc_transform_mode =
+ read_design_ini("scaling", get_misc_path(p_miscname, "config.ini"));
+ if (misc_transform_mode == "smooth")
+ return Qt::SmoothTransformation;
+ }
+ return Qt::FastTransformation;
+}
+
+QString AOApplication::get_category(QString p_char)
+{
+ QString f_result = read_char_ini(p_char, "category", "Options");
+ return f_result;
+}
+
QString AOApplication::get_chat(QString p_char)
{
if (p_char == "default")
@@ -881,7 +911,7 @@ QStringList AOApplication::get_theme_effects()
QStringList lines = read_file(p_path).split("\n");
foreach (QString effect, lines) {
- effect = effect.split("=")[0].trimmed();
+ effect = effect.split("=")[0].trimmed().split("_")[0];
if (!effect.isEmpty() && !effects.contains(effect))
effects.append(effect);
}
@@ -899,7 +929,7 @@ QStringList AOApplication::get_effects(QString p_char)
QStringList lines = read_file(p_path).split("\n");
foreach (QString effect, lines) {
- effect = effect.split("=")[0].trimmed();
+ effect = effect.split("=")[0].trimmed().split("_")[0];
if (!effect.isEmpty() && !effects.contains(effect))
effects.append(effect);
}
@@ -934,25 +964,33 @@ QString AOApplication::get_effect(QString effect, QString p_char,
return p_path;
}
-QString AOApplication::get_effect_sound(QString fx_name, QString p_char)
+QString AOApplication::get_effect_property(QString fx_name, QString p_char,
+ QString p_property)
{
+ QString f_property;
+ if (p_property == "sound")
+ f_property = fx_name;
+ else
+ f_property = fx_name + "_" + p_property;
QString p_effect = read_char_ini(p_char, "effects", "Options");
QString p_path = get_base_path() + "misc/" + p_effect + "/effects.ini";
QString design_ini_path = get_theme_path("effects/effects.ini");
QString default_path = get_default_theme_path("effects/effects.ini");
- QString f_result = read_design_ini(fx_name, p_path);
+ QString f_result = read_design_ini(f_property, p_path);
if (f_result == "") {
- f_result = read_design_ini(fx_name, design_ini_path);
+ f_result = read_design_ini(f_property, design_ini_path);
if (f_result == "") {
- f_result = read_design_ini(fx_name, default_path);
+ f_result = read_design_ini(f_property, default_path);
}
}
- if (fx_name == "realization") {
+ if (fx_name == "realization" && p_property == "sound") {
f_result = get_custom_realization(p_char);
}
+ qDebug() << "got" << f_property << "of" << fx_name << "==" << f_result;
+
return f_result;
}