library(tidyverse)
library(plotly)
library(lubridate)
library(openintro)
genshin_init <- read_csv("csvs/genshin.csv")Is Genshin Powercreep Real?
Introduction
“Powercreep” is a term used broadly in gacha games to describe the gradual increase in strength of released playable units. Gacha games have a primary incentive of profiting off of their players, which means they must in some way incentivize players to spend money on the gambling component of their game. Gacha companies often do this by making the currently available characters stronger than previously released characters in order to motivate players to spend on new characters. The primary issue with this tactic, however, is that old characters are often eclipsed in the presence of newer, more powerful units. This is often seen as unfair and unethical by playerbases, and companies often receive backlash for blatant examples of powercreeping. This is especially true for competitive games such as “Onmyoji”, in which players duel each other.
A familiar example for the uninitiated is Apple’s iPhone series. Apple customers may often find themselves reluctantly buying new models over the years due to the (allegedly intentional) deficiencies of previous models.
In saurusness’ video “Do we need to worry about powercreep in Genshin?”, various types of Powercreep are discussed. The main types of powercreep are “Direct” and “Ambient” powercreep. Direct powercreep occurs when a new character fulfills the role of an old character completely, and simply better. Ambient powercreep occurs when the strength of units generally, slowly, increase over time, rendering old characters unplayable for endgame content regardless of if their niche has been stolen by a new character. A proxy measure for strength in Genshin Impact is “Motion Value”, more easily understood as the raw damage a character can output on their own. Suppose two characters fulfill the same niche, then one character could be said to be “stronger” than another character if they have higher motion values. Of course, motion values cannot hope to describe a characters strength in their entirety. Because of the existence of team synergies, elemental reactions, and utility skills, a character’s motion value is only one of many components that can make a character “strong”. However, in this project I will use motion values as a proxy for character strength in a pure damage sense, which will help to visualize whether these motion values have been increasing throughout the continued story of Genshin Impact.
Sophia Healy on Kaggle published a Genshin Impact character dataset 15 days before the completion of this project. I utilize this data mostly for the characters’ release dates and elements. I then add motion value data via computations using the raw scaling attributes of these characters which can be found on Keqing Mains’ website. Ultimately, the relevant variables are:
rarity: a measure of the chance to obtain a character (categorical, 4 or 5). in this project we only consider 5 star characters, and use this variable to filter.
release_date: the day on which the character was released (date). we use this for constructing time series.
vision: the character’s element, which partially determines their niche (categorical: anemo, cryo, dendro, electro, geo, hydro, pyro)
mv: the computed motion value per second of the character in weighted artifact rolls per second
Read and Load Libraries
Filter for Only 5*s
As previously discussed, the characters which we will consider for this investigation are limited (meaning they are not always available) 5 star damage-dealers. Using filter, we remove the characters which do not meet these criteria, and using select we remove all variables which we will not need.
genshin <- genshin_init |>
filter(rarity==5)
# remove the traveler
genshin <- genshin |>
filter(birthday!="Player's Choice")
# filter for limited 5*s only
genshin <- genshin |>
filter(limited==TRUE)
# get rid of variables we don't need
genshin <- genshin |>
select(character_name, region, vision, weapon_type, release_date, hp_90_90,
atk_90_90, def_90_90)
# select only the damage-dealing characters and reread the dates
genshin <- genshin |>
mutate(release_date = mdy(release_date)) |>
filter(character_name != "Venti",
character_name != "Zhongli",
character_name != "Kaedehara Kazuha",
character_name != "Nilou",
character_name != "Baizhu")
# Remove characters from 4.0 and later, as they are not fully understood
genshin <- genshin |>
filter(character_name != "Lyney",
character_name != "Neuvillette",
character_name != "Wriothesley")
head(genshin)# A tibble: 6 × 8
character_name region vision weapon_type release_date hp_90_90 atk_90_90
<chr> <chr> <chr> <chr> <date> <dbl> <dbl>
1 Albedo Mondstadt Geo Sword 2020-12-23 13226 251
2 Alhaitham Sumeru Dendro Sword 2023-01-18 13348 313
3 Arataki Itto Inazuma Geo Claymore 2021-12-14 12858 227
4 Cyno Sumeru Electro Polearm 2022-09-28 12490 318
5 Eula Mondstadt Cryo Claymore 2021-05-18 13226 342
6 Ganyu Liyue Cryo Bow 2021-01-12 9797 335
# ℹ 1 more variable: def_90_90 <dbl>
Calculate Character Motion Values
We run through the characters alphabetically.
Using the values of artifact substats on Honey Hunter, we add weights to separate stats to standardize our calculation of motion value. We will deem attack scaling multipliers as having a weight of “1”, and then all other multipliers will be calculated as their ratio to wt_atk.
To further standardize the units of motion value, we can divide multipliers by the % values of a substat roll. The units of “motion value” will then be weighted-rolls per second.
wt_HP <- mean(c(209.13, 239.0, 268.88, 298.75))
wt_atk <- mean(c(13.62, 15.56, 17.51, 19.45))
wt_def <- mean(c(16.2, 18.52, 20.83, 23.15))
wt_EM <- mean(c(16.32, 18.65, 20.98, 23.31))roll_HP <- mean(c(4.08, 4.66, 5.25, 5.83))
roll_atk <- mean(c(4.08, 4.66, 5.25, 5.83))
roll_def <- mean(c(5.1, 5.83, 6.56, 7.29))
roll_EM <- wt_EMmotion_value <- function(scaling, instances, time_interval, type){
if(type=="HP"){
return(scaling/roll_HP*wt_HP/wt_atk*instances/time_interval)
}
else if(type=="atk"){
return(scaling/roll_atk*wt_atk/wt_atk*instances/time_interval)
}
else if(type=="def"){
return(scaling/roll_def*wt_def/wt_atk*instances/time_interval)
}
else if(type=="EM"){
return(scaling/roll_EM*wt_EM/wt_atk*instances/time_interval)
# EM is special as it has no %-rolls
}
else{
print("type invalid")
}
}All calculations will be performed with level 9 talents and at C0.
Albedo
Albedo’s rotations include his skill and burst, and he usually is played off-field. His skill has a theoretical 100% uptime, and thus should deal damage roughly every 2.5 seconds (factoring in hitlag). His skill and burst also have partial attack scalings, but these are negligible due to his low investment in atk stats. The talent multiplier for his skill at lvl 9 is 227.12% DEF.
mv_albedo <- motion_value(227.12, 1, 2.5, "def")Al-Haitham
Al-Haitham is an extremely complicated character to consider for scalings. He gets value out of his normal, charged, skill, bust, and special skill attacks, which make calculations a nightmare, especially because his rotations are not consistent the way Albedo’s are. Another issue is that Al-Haitham benefits greatly from EM for extra additive damage. One major deficiency of these motion value calculations is the fact that additive damage from reactions such as Spread and Aggravate, and buffs from characters like Shenhe or Yunjin are completely unconsidered. This will hurt various Electro and Dendro characters in their calculated motion values, because they get so much value out of these reactions. Al-Haitham’s typical rotation is 20 seconds long.
We reference SevyPlays’ guide on Al-Haitham for the total rotation combo:
- Q (0-mirror)
- 3x N5
- 1x N1C
- 1x E
- 4x 3-mirror skill proc
- 1x 2-mirror skill proc
mv_alhaitham <-
# Q (0-mirror)
motion_value(206.72, 4, 20, "atk") + motion_value(165.38, 4, 20, "EM") +
# 3x N5
motion_value(90.99+93.24+62.79*2+122.67+154.05, 3, 20, "atk") +
# 1x N1C
motion_value(90.99+101.51*2, 1, 20, "atk") +
# 1x E
motion_value(329.12, 1, 20, "atk") + motion_value(263.3, 1, 20, "EM") +
# 4x 3-mirror skill proc
4*motion_value(114.24, 3, 20, "atk") + 4*motion_value(228.48, 3, 20, "EM") +
# 1x 2-mirror skill proc
motion_value(114.24, 2, 20, "atk") + motion_value(228.48, 2, 20, "EM")Arataki Itto
Itto, like Al-Haitham is a hypercarry, so we expect similarly high damage values. He faces similar issues in computations as Al-Haitham as well. We refer the KQM TCL again. Itto’s attack scalings, unlike Albedo’s, are not negligible, because Itto gains roughly 100% of his defense as atk while in his burst state. This helps simplify some calculations.
As per KQM’s guide on Itto, a full 20s rotation contains:
- 1x N1
- 1x N2
- 1x N3
- 1x N4
- 2x E
- 7x C
- 3x F
Note that Arataki Itto’s Kesagiri (C) slashes gain an extra 35% defense scaling from his ascension passive.
mv_itto <-
# 1x N1
motion_value(145.57, 1, 20, "atk") +
# 1x N2
motion_value(145.57 + 140.3, 1, 20, "atk") +
# 1x N3
motion_value(145.57 + 140.3 + 168.36, 1, 20, "atk") +
# 1x N4
motion_value(145.57 + 140.3 + 168.36 + 215.37, 1, 20, "atk") +
# 2x E
motion_value(522.24, 2, 20, "atk") +
# 7x C
motion_value(167.48, 7, 20, "atk") + motion_value(35, 7, 20, "def") +
# 3x F
motion_value(350.76, 3, 20, "atk")Cyno
Cyno is also a sort-of “hypercarry”. Time to go again. We will assume that the player uses 4-piece thundering fury on Cyno.
As per KQM’s guide on Cyno, a full 20s rotation contains:
- 1x E (non-mortuary)
- 6x E (mortuary)
- 3x duskstalker procs
- 4x N4
- 1x N2
- 1x N5
Note the following, by ascension passives:
- NAs gain 150% EM scaling
- Duskstalker bolts seem to do 100% atk total, with an additional 250% EM total
mv_cyno <-
# 1x E (non-mortuary)
motion_value(221.68, 1, 20, "atk") +
# 6x E (mortuary)
motion_value(266.56, 6, 20, "atk") +
# 3x duskstalker procs
motion_value(100, 3, 20, "atk") + motion_value(250, 3, 20, "EM") +
# 4x N4
motion_value(143.82 + 151.51 + 178.85 + 94.97*2, 4, 20, "atk") +
# 1x N2
motion_value(143.82 + 151.51, 1, 20, "atk") +
# 1x N5
motion_value(143.82 + 151.51 + 178.85 + 94.97*2 + 240.39, 1, 20, "atk") +
# 23x passive NA EM scaling
motion_value(150, 23, 20, "EM")Eula
Eula’s cryo damage from her skill and burst are negligible, thus only her normal attack combo damage and burst explosion damage need to be considered. However, her held skill creates a mini-lightfall sword which deals half the damage of the burst. The standard c0 rotation gains 14 lightfall stacks.
As per KQM’s extended guide on Eula, a standard 20 second rotation contains:
- 2x N4
- 1x E lightfall
- 1x Q explosion
mv_eula <-
# 2x N4
motion_value(164.86 + 171.87 + 104.35*2 + 206.95, 2, 20, "atk") +
# 1x E lightfall
motion_value(0.5*674.34, 1, 20, "atk") +
# 1x Q explosion
motion_value(674.34, 1, 20, "atk") + motion_value(137.78, 14, 20, "atk")Ganyu
Ganyu’s classic team archetype is freeze, or “Morgana”. This has a very consistent burst hit rate in AoE, but has a high variability in general. A generous assumption is that in AoE content (3+ targets), 25 out of the 50 cryo shards hit.
As per KQM’s extended guide on Ganyu, a standard 20 second rotation contains:
- 3x C
- 1x E (deals damage twice)
- 1x Q
mv_ganyu <-
# 3x C
motion_value(217.6+369.92, 3, 20, "atk") +
# 1x E
motion_value(224.4*2, 1, 20, "atk") +
# 1x Q
motion_value(119.46, 25, 20, "atk")Hu Tao
Hu Tao is another hypercarry, who bursts every other rotation (unlike the other hypercarries we have computed so far).
As per KQM’s extended guide on Hu Tao, a standard 20 second rotation contains:
- 9x N1C
- 3x Blood Blossom
- 0.5x Q (burst every other rotation)
mv_hutao <-
# 9x N1C
motion_value(307.51, 9, 20, "atk") +
# 3x Blood Blossom
motion_value(108.8, 3, 20, "atk") +
# 0.5x Q
motion_value(587.93, 0.5, 20, "atk")Kamisato Ayaka
LOML AYAKA!!! She is… the best (idcidc)
As per KQM’s extended guide on Ayaka, a standard 20 second rotation contains:
- 2x N2C
- 1x N1
- 1x E
- 1x Q (20 ticks)
mv_ayaka <-
# 2x N2C + 1x N1
motion_value(84.01+89.44+303.84, 2, 20, "atk") +
motion_value(84.01, 1, 20, "atk") +
# 1x E
motion_value(406.64, 1, 20, "atk") +
# 1x Q
motion_value(190.91, 19, 20, "atk") + motion_value(286.36, 1, 20, "atk")Kamisato Ayato
As per KQM’s extended guide on Ayato, a standard 20 second rotation contains:
- 1x E Explosion
- 5x N3 (in skill) + 15 namisen stacks
- 10x Q hits
mv_ayato <-
# 1x E explosion
motion_value(186.44, 1, 20, "atk") +
# 4x N3 (in skill) + 12 namisen stacks
motion_value(97.17+108.23+119.29, 5, 20, "atk") +
motion_value(1.03, 15, 20, "HP") +
# 10x Q hits
motion_value(112.98, 10, 20, "atk")Klee
KQM’s resources on Klee’s rotations were limited, so I referenced an extended Klee video guide for a 20s rotation:
- 1x N1
- 4x N1C
- 2x E
- 1x Q
mv_klee <-
# 1x N1 + 4x N1C
motion_value(122.67, 1, 20, "atk") + motion_value(122.67 + 267.51, 4, 20, "atk") +
# 2x E (2 bounces hit each on average, 4 mines each hit on average)
motion_value(161.84*2+55.76*4, 2, 20, "atk") +
# 1x Q
motion_value(72.49, 22, 20, "atk")Nahida
We assume that Nahida is used on-field. As I am familiar with her rotations and scalings, no reference is needed:
- 4x N4
- 9x TKP procs per 20s rotation
- 1x E hold hit
mv_nahida <-
# 4x N4
motion_value(68.52+62.86+77.99+99.29, 4, 20, "atk") +
# 9x TKP procs
motion_value(175.44, 9, 20, "atk") + motion_value(350.88, 9, 20, "EM") +
# 1x E hold hit
motion_value(221.68, 1, 20, "atk")Raiden Shogun
Raiden can act as a hypercarry, and she has some complicated combos when factoring her normal, skill, and burst damage. I am familiar with her combos, again, so no reference is needed. We assume 60/60 resolve stacks and a 20s rotation:
- 1x Q initial hit
- 1x E initial hit
- 18x E hits
- 3x N3C
- 1x N2C
mv_raiden <-
# 1x Q initial hit + resolve
motion_value(681.36+60*6.61, 1, 20, "atk") +
# 1x E initial hit + 18x E hits
motion_value(199.24, 1, 20, "atk") + motion_value(71.4, 18, 20, "atk") +
# 3x N3C + 1x N2C + resolve
motion_value(75.24+73.93+90.52+103.6+125.06, 3, 20, "atk") +
motion_value(75.24+73.93+103.6+125.06, 1, 20, "atk") +
motion_value(1.23*60, 19, 20, "atk")Sangonomiya Kokomi
Kokomi is not a traditional DPS, or some may not consider her a damage dealer at all, but her base multipliers are respectable, and in teams such as Sukokomon, she contributes a respectable portion of the damage herself. I am familiar with her Sukokomon rotation but not her scalings. A 20s rotation contains:
- 1x E initial hit
- 10x E hits + 5x HP bonus
- 1x Q initial hit
- 3x N2, 1x C + HP bonus
mv_kokomi <-
# 1x E initial hit + 10x E hits + 5x HP skill bonus
motion_value(185.62, 11, 20, "atk") + motion_value(12.06, 5, 20, "HP") +
# 1x Q initial hit
motion_value(17.71, 1, 20, "HP") +
# 3x N2 + 1x C + HP bonus
motion_value(116.24+104.62, 3, 20, "atk") +
motion_value(252.14, 1, 20, "atk") +
motion_value(8.23, 6, 20, "HP") +
motion_value(11.52, 1, 20, "HP")Shenhe
Shenhe is also not typically considered a damage dealer, but theorycrafters tend to consider the icy quill damage that she provides to be a direct contribution instead of a buff because of its additive calculation. A standard 20s rotation with Shenhe contains the following:
- 1x Q initial hit + 12x Q hits
- 2x E press hits
- 10x icy quills
mv_shenhe <-
# 1x Q initial hit + 12x Q hits
motion_value(171.36, 1, 20, "atk") + motion_value(56.3, 12, 20, "atk") +
# 2x E press hits
motion_value(236.64, 2, 20, "atk") +
# 10x icy quills
motion_value(77.62, 10, 20, "atk")Tartaglia
Tartaglia is not a typical hypercarry, as he tends to enable his team to deal damage with his fast hydro application. Nonetheless he contributes respectable damage. We reference KQM’s guide for a 20s rotation:
- 6x N2C
- 5x Riptide Flash
- 5x Riptide Slash
- 1x Ranged Q
- 2x E initial hit
mv_childe <-
# 6x N2C
motion_value(390.74, 6, 22, "atk") +
# 5x Riptide Flash
motion_value(17.63*3, 5, 22, "atk") +
# 5x Riptide Slash
motion_value(86.5, 5, 22, "atk") +
# 1x Ranged Q
motion_value(643.28, 1, 22, "atk") +
# 1x E initial hit
motion_value(122.4, 2, 22, "atk")Wanderer
We reference KQM’s extended guide on Wanderer for a 20 second rotation:
- 5x N2C
- 1x N2
- 1x E
- 0.5x Q
mv_scara <-
# 5x N2C + 1x N2
motion_value(126.24+119.45+237.74, 5, 20, "atk") +
motion_value(126.24+119.45, 1, 20, "atk") +
# 1x E
motion_value(161.84, 1, 20, "atk") +
# 0.5x Q
motion_value(250.24*5, 0.5, 20, "atk")Xiao
Referring to Xiao’s guide on KQM, his highest use case has the following components in a 20 second rotation:
- 2x E
- 11x HP
- 2x LP
mv_xiao <-
# 2x E
motion_value(429.76, 2, 20, "atk") +
# 11x HP
motion_value(375.5, 11, 20, "atk") +
# 2x LP
motion_value(300.63, 2, 20, "atk")Yae Miko
Yae is an off-field damage dealer, and her rotation is exceedingly simple. I am familiar with her rotation and scalings, so no reference is needed. typical 20s rotation contains:
- 15x lvl. 3 turret strikes
- 0.5x Q initial hit
- 1.5x Q hits
mv_yae <-
# 15x lvl. 3 turret strikes
motion_value(161.16, 15, 20, "atk") +
# 0.5x Q initial hit
motion_value(442, 0.5, 20, "atk") +
# 1.5x Q hits
motion_value(567.49, 1.5, 20, "atk")Yelan
Referencing KQM’s Yelan guide, a standard 20 second rotation will contain:
- 1x Q initial hit
- 15x Q waves
- 1x E
mv_yelan <-
# 1x Q initial hit
motion_value(12.42, 1, 20, "HP") +
# 15x Q waves
motion_value(8.28*3, 15, 20, "HP") +
# 1x E
motion_value(38.44, 1, 20, "HP")Yoimiya
Yoimiya’s attack strings are quite simple, and she is very similar in playstyle to Hu Tao. Her combos are very simple, and as I am familiar with her rotations and scalings, no reference is needed. in a standard 20s rotation:
- 3x N5
- 1x Q initial hit
- 4x Q hits
mv_yoimiya <-
# 3x N5
motion_value(119.88+115+149.49+156.14+178.04, 3, 20, "atk") +
# 1x Q initial hit
motion_value(216.24, 1, 20, "atk") +
# 4x Q hits
motion_value(207.4, 4, 20, "atk")Merge the New Motion Value Data with the Cleaned Dataframe
# make all the motion value numbers into a vector ordered by the character's
# index in the original dataframe
mv <- c(mv_albedo, mv_alhaitham, mv_itto, mv_cyno, mv_eula, mv_ganyu, mv_hutao,
mv_ayaka, mv_ayato, mv_klee, mv_nahida, mv_raiden, mv_kokomi, mv_shenhe,
mv_childe, mv_scara, mv_xiao, mv_yae, mv_yelan, mv_yoimiya)
# join genshin and the mv vector to make a new dataframe
genshin_mv <- data.frame(genshin, mv)Create a Linear Model and Assess
powercreep_lm <- lm(genshin_mv$mv ~ genshin_mv$release_date)
summary(powercreep_lm)
Call:
lm(formula = genshin_mv$mv ~ genshin_mv$release_date)
Residuals:
Min 1Q Median 3Q Max
-24.643 -11.234 3.438 10.910 23.469
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -222.03765 238.23341 -0.932 0.364
genshin_mv$release_date 0.01410 0.01259 1.120 0.277
Residual standard error: 14.51 on 18 degrees of freedom
Multiple R-squared: 0.06515, Adjusted R-squared: 0.01322
F-statistic: 1.254 on 1 and 18 DF, p-value: 0.2774
plot(powercreep_lm)plot(genshin_mv$mv ~ genshin_mv$release_date)
abline(powercreep_lm)Initial Discussion
Ok well what does all this even say? Perhaps the first and most important thing to recognize is that the least-squares linear model created using this data has a p-value of 0.2774, which is absolutely insufficient to reject the null hypothesis that there is no relationship between a characters release date and their rotational motion values. Thus, none of the four diagnostic plots even matter, and neither does the plot of the linear model. Yes, visually there appears to be some sort of upward trend to motion values over time, but this is ultimately meaningless, because this model explains only 1% of the variability in motion values through release date. This maybe begs the question whether any of the other variables have any weight in explaining the differences in motion values.
motion value vs. vision
powercreep2 <- lm(genshin_mv$mv ~ genshin_mv$vision)
summary(powercreep2)
Call:
lm(formula = genshin_mv$mv ~ genshin_mv$vision)
Residuals:
Min 1Q Median 3Q Max
-21.979 -10.507 2.155 10.507 19.352
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 45.6184 11.1264 4.100 0.00125 **
genshin_mv$visionCryo -2.4842 13.6270 -0.182 0.85816
genshin_mv$visionDendro 4.9682 15.7351 0.316 0.75721
genshin_mv$visionElectro 9.7906 14.3641 0.682 0.50745
genshin_mv$visionGeo -11.3761 15.7351 -0.723 0.48250
genshin_mv$visionHydro 0.6543 13.6270 0.048 0.96244
genshin_mv$visionPyro -8.7497 14.3641 -0.609 0.55293
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 15.74 on 13 degrees of freedom
Multiple R-squared: 0.2064, Adjusted R-squared: -0.1598
F-statistic: 0.5637 on 6 and 13 DF, p-value: 0.7521
plot(powercreep2)And it seems that the character’s element is inconclusive as an explanatory variable too! We as a community know, however, that the motion values of characters ARE dependent on their element due to the nature of their reactions. A character like Hu Tao, for example, MUST have low motion values in order to balance the fact that she recieves a roughly 2x multiplicative damage bonus from the vaporize reaction. This highlights a weakness in using motion values to assess powercreep, because ultimately the raw numbers of a character in isolation from their team means little as to how much damage and utility they are capable of providing. In a more simplistic game where characters fight solo, motion values can mean nearly everything, but part of the beauty of Genshin Impact is the ability to play unique and innovative teams which elevate your favorite characters to heights that they could never reach on their own.
Expository Plots
HOW ABOUT SOME SIDE BY SIDE BOX PLOTS!!!
vision_pal <- c("#b8dbb0", "#78c6e9", "#2ecc71", "#f47fff", "#f1c40f",
"#3498db", "#ee7600")
boxplots <- ggplot(genshin_mv, aes(x = vision, y = mv, fill = vision)) +
geom_boxplot() +
scale_fill_manual(values = vision_pal) +
labs(title = "Motion Value Boxplots by Element")
boxplotsI’m honestly quite shocked by these plots. I expected the motion values of geo and anemo to be much higher on average due to their lack of access to multiplicative reactions.
stacks <- ggplot(genshin_mv, aes(x = vision, y = mv, fill = region)) +
geom_col() +
scale_fill_brewer(palette = "Pastel1") +
theme_classic() +
labs(title = "Motion Values by Element and Region")
stacksThis plot honestly doesn’t say much either other than that all the limited dendro 5* damage dealers that are currently out are from Sumeru. Perhaps you could also say that there are a lack of regional diversities in the anemo, dendro, electro, and geo elements for limited 5* damage dealers.
I definitely want to move forward with a time series plot. So that’s what I’ll do.
Final Viz and Discussion
For the initial ggplot, I add the release date as the x aesthetic, and the motion value as the y aesthetic. I add the classic theme first so as to not mess with the palette used for the points later. I then add a scatterplot using the point geom, and add the vision as the point color aesthetic within this. Adding the color aesthetic here is very important, because when I put it in the first aesthetics declaration at the top, the loess smooth did not work. I then add the smooth geom with a loess smoother, and change the line color to black, making the error band have a low opacity (I wanted to include it just to emphasize how horrible the model is). Then I add the title, x and y axis labels, and caption. I finally center the title using hjust, and call the plot.
insignificant <- ggplot(genshin_mv, aes(x=release_date, y=mv)) +
theme_classic() +
geom_point(aes(color=vision, name=character_name)) +
scale_color_manual(values = vision_pal) +
geom_smooth(method='loess', color = "black", alpha=0.1) +
labs(title = "Powercreep in Genshin Impact", x = "Release Date (yyyy-mm)",
y = "Motion Value (rolls/s)",
caption = "character data from Sophia Healy,
motion values computed using KQM data") +
theme(plot.title = element_text(hjust = 0.5))Warning in geom_point(aes(color = vision, name = character_name)): Ignoring
unknown aesthetics: name
insignificant`geom_smooth()` using formula = 'y ~ x'
Then to add interactivity, I use plotly, which unfortunately cuts off the caption:
ggplotly(insignificant)`geom_smooth()` using formula = 'y ~ x'
.
The scatterplot and loess smooth indicate a general upwards trend in motion value over time, with a dip in early 2022. One could make an argument that this dip should not be there at all, as Shenhe is not necessarily a “damage dealer”, and perhaps if she is included on these plots, the motion value calculations should change to reflect her on-fielding potential similar to characters such as Nahida. The distribution of visions (elements) across the y-axis corroborates the boxplots displayed in the earlier sections of this project, but showing no clear grouping of motion values by vision.
So what do these mean? Well, in short, nothing predictive. The data provides no evidence of a significant relationship between the motion value and release date variables. However, it is important to consider that this data is a complete population of characters before version 4.0. In that sense, yes, on average the motion value of limited 5 star damage dealers released in the first quarter of the game’s main storyline is lower than the average motion value of limited 5 star damage dealers released in the second quarter of the game’s main storyline. Does this mean that powercreep is occurring in Genshin Impact? No, this data ultimately says nothing conclusive about powercreep in Genshin Impact, and is in fact subject to change if new characters enable different rotations and roles for the characters whose motion values are calculated and displayed in this graph.
As for my thoughts, I believe that in a more practical sense, the 4-member team-based nature of Genshin Impact helps to mitigate the effect of ambient powercreep. In order to substitute a new character into a team, there will always be sacrifices, so long as HoyoVerse makes future characters’ kits sufficiently different than their predecessors. saurusness, in their video, describes how they felt that Ayato was powercrept by Neuvillette (a character we did not cover in this exploration due to recency). I can agree that they share similar niches and can understand why they felt this way, but it is important to recognize that Ayato retains characteristics which Neuvillette does not, namely, a normal-attack focused playstyle, and off-field hydro application with his burst, which is a form of future-proofing, which allows Ayato to be rebalanced as characters and abyss cycles which synergize with this playstyle return.
I was disappointed to see that the painstaking labor of manual data entry and computation resulted in no conclusive inferences or predictions, and this reminds me that it is so important to motivate, incentivize, and reward inconclusive research in science, because I cannot imagine the magnitude of dejectedness I would feel were this an actual research topic I had poured years into. This also makes me interested in learning more about statistical methods, because I have no clue how to draw statistical conclusions from these types of insignificant results. Thanks for reading if you made it here!
Works Cited:
- “Albedo: KQM TCL.” KQM TCL RSS, https://library.keqingmains.com/characters/geo/albedo. Accessed 13 Nov. 2023.
- “Alhaitham: KQM TCL.” KQM TCL RSS, https://library.keqingmains.com/characters/dendro/alhaitham. Accessed 14 Nov. 2023.
- “Ayaka Guide: 優雅な踊り.” KQM, 2 Aug. 2023, https://keqingmains.com/ayaka/.
- “Ayato Guide: Pillar of Fortitude.” KQM, 22 Apr. 2023, https://keqingmains.com/ayato/.
- “Cyno Quick Guide.” KQM, 11 Nov. 2023, https://keqingmains.com/q/cyno-quickguide/.
- “Cyno: KQM TCL.” KQM TCL RSS, library.https://keqingmains.com/characters/electro/cyno. Accessed 14 Nov. 2023.
- “Eula: KQM TCL.” KQM TCL RSS, library.https://keqingmains.com/characters/cryo/eula. Accessed 14 Nov. 2023.
- “Ganyu Guide: Plenilune Gaze.” KQM, 20 Oct. 2023, https://keqingmains.com/ganyu/.
- “Ganyu: KQM TCL.” KQM TCL RSS, library.https://keqingmains.com/characters/cryo/ganyu. Accessed 14 Nov. 2023.
- “Gacha Game.” Wikipedia, Wikimedia Foundation, 24 Oct. 2023, https://en.wikipedia.org/wiki/Gacha_game.
- “Gladiator’s Finale.” Genshin Impact Database - Honey Hunter World, Jan. 2023, https://genshin.honeyhunterworld.com/i_n400089/?lang=EN.
- “Hu Tao Guide: Butterfly’s Embrace.” KQM, 20 Oct. 2023, https://keqingmains.com/hu-tao/.
- “Hu Tao: KQM TCL.” KQM TCL RSS, library.https://keqingmains.com/characters/pyro/hu-tao. Accessed 14 Nov. 2023.
- “Kamisato Ayaka: KQM TCL.” KQM TCL RSS, library.https://keqingmains.com/characters/cryo/kamisato-ayaka. Accessed 14 Nov. 2023.
- “Kamisato Ayato: KQM TCL.” KQM TCL RSS, library.https://keqingmains.com/characters/hydro/kamisato-ayato. Accessed 14 Nov. 2023.
- kb9v, Jamie. “The Bestest Klee Guide in the World! | 3.8 Updated (New Builds, Dendro, Teams).” YouTube, YouTube, 29 June 2023, https://www.youtube.com/watch?v=NmbyC2VrD5w.
- Nociii#0111, and Sir_pick_the_prick#2209. “Albedo Guide: In-the-Field Research.” KQM, 12 Sept. 2023, https://keqingmains.com/albedo/.
- “Sangonomiya Kokomi: KQM TCL.” KQM TCL RSS, library.https://keqingmains.com/characters/hydro/sangonomiya-kokomi. Accessed 14 Nov. 2023.
- saurusness. “Do We Need to Worry about Powercreep in Genshin?” YouTube, YouTube, 30 Oct. 2023, https://www.youtube.com/watch?v=pB2__DmltWg.
- SevyPlays. “Maximize Alhaitham’s Damage! In-Depth Attack Combo & Rotations Alhaitham Guide | Genshin Impact 3.4.” YouTube, YouTube, 20 Jan. 2023, https://www.youtube.com/watch?v=-jhKeIT2K5k.
- “Shenhe: KQM TCL.” KQM TCL RSS, https://library.keqingmains.com/characters/cryo/shenhe. Accessed 14 Nov. 2023.
- Sitri#9504. “Eula Guide: Noblesse Oblige.” KQM, 24 July 2023, https://keqingmains.com/eula.
- “Tartaglia Guide: Farewell of Snezhnaya.” KQM, 22 Apr. 2023, https://keqingmains.com/tartaglia/.
- “Tartaglia: KQM TCL.” KQM TCL RSS, library.https://keqingmains.com/characters/hydro/tartaglia. Accessed 14 Nov. 2023.
- “Wanderer Guide: Eye of the Storm.” KQM, 12 Aug. 2023, https://keqingmains.com/wanderer/.
- “Wanderer: KQM TCL.” KQM TCL RSS, library.https://keqingmains.com/characters/anemo/wanderer. Accessed 14 Nov. 2023.
- “Xiao Guide: Adeptal Guide to Conquering Xiao.” KQM, 5 Nov. 2023, https://keqingmains.com/xiao/.
- “Xiao: KQM TCL.” KQM TCL RSS, https://library.keqingmains.com/characters/anemo/xiao. Accessed 14 Nov. 2023.
- “Yelan Guide: Things Are about to Get Dicey.” KQM, 20 Oct. 2023, https://keqingmains.com/yelan/.
- “Yelan: KQM TCL.” KQM TCL RSS, library.https://keqingmains.com/characters/hydro/yelan. Accessed 14 Nov. 2023.