aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/courtroom.h3
-rw-r--r--src/courtroom.cpp19
2 files changed, 18 insertions, 4 deletions
diff --git a/include/courtroom.h b/include/courtroom.h
index 8a41b605..8890b8f5 100644
--- a/include/courtroom.h
+++ b/include/courtroom.h
@@ -187,7 +187,8 @@ public:
void set_scene(QString f_desk_mod, QString f_side);
// sets ui_vp_player_char according to SELF_OFFSET, only a function bc it's used with desk_mod 4 and 5
- void set_self_offset(QString p_list);
+ // sets ui_effects_layer according to the SELF_OFFSET, unless it is overwritten by effects.ini
+ void set_self_offset(QString p_list, QString p_effect);
// takes in serverD-formatted IP list as prints a converted version to server
// OOC admittedly poorly named
diff --git a/src/courtroom.cpp b/src/courtroom.cpp
index 34a596da..bb8f9c0a 100644
--- a/src/courtroom.cpp
+++ b/src/courtroom.cpp
@@ -2404,7 +2404,7 @@ void Courtroom::display_character()
else
ui_vp_player_char->set_flipped(false);
// Move the character on the viewport according to the offsets
- set_self_offset(m_chatmessage[SELF_OFFSET]);
+ set_self_offset(m_chatmessage[SELF_OFFSET], m_chatmessage[EFFECTS]);
}
void Courtroom::display_pair_character(QString other_charid, QString other_offset)
@@ -3321,7 +3321,7 @@ void Courtroom::start_chat_ticking()
// handle expanded desk mods
switch(m_chatmessage[DESK_MOD].toInt()) {
case 4:
- set_self_offset(m_chatmessage[SELF_OFFSET]);
+ set_self_offset(m_chatmessage[SELF_OFFSET], QString("||"));
[[fallthrough]];
case 2:
set_scene("1", m_chatmessage[SIDE]);
@@ -3762,8 +3762,9 @@ void Courtroom::set_scene(QString f_desk_mod, QString f_side)
}
}
-void Courtroom::set_self_offset(QString p_list) {
+void Courtroom::set_self_offset(QString p_list, QString p_effect) {
QStringList self_offsets = p_list.split("&");
+ QStringList play_effect = p_effect.split("|");
int self_offset = self_offsets[0].toInt();
int self_offset_v;
if (self_offsets.length() <= 1)
@@ -3771,6 +3772,18 @@ void Courtroom::set_self_offset(QString p_list) {
else
self_offset_v = self_offsets[1].toInt();
ui_vp_player_char->move(ui_viewport->width() * self_offset / 100, ui_viewport->height() * self_offset_v / 100);
+
+ //If an effect is ignoring the users offset, we force it to the default position of the viewport.
+ if (ao_app->get_effect_property(play_effect[0], current_char, "ignore_offset") == "true") {
+ ui_vp_effect->move(ui_viewport->x(), ui_viewport->y());
+ return;
+ }
+
+ //Offset is not disabled, we move the effects layer to match the position of our character
+ //We need to add the viewport as an offset as effects are not bound to it.
+ int effect_x = (ui_viewport->width() * self_offset / 100) + ui_viewport->x();
+ int effect_y = (ui_viewport->height() * self_offset_v / 100) + ui_viewport->y();
+ ui_vp_effect->move(effect_x, effect_y);
}
void Courtroom::set_ip_list(QString p_list)