diff --git a/internal/weapons/spear/crimsonmoonssemblance/config.yml b/internal/weapons/spear/crimsonmoonssemblance/config.yml new file mode 100644 index 0000000000..19d130f91d --- /dev/null +++ b/internal/weapons/spear/crimsonmoonssemblance/config.yml @@ -0,0 +1,3 @@ +package_name: crimsonmoonssemblance +genshin_id: 13512 +key: crimsonmoonssemblance diff --git a/internal/weapons/spear/crimsonmoonssemblance/crimsonmoonssemblance.go b/internal/weapons/spear/crimsonmoonssemblance/crimsonmoonssemblance.go new file mode 100644 index 0000000000..7ba8d2deb0 --- /dev/null +++ b/internal/weapons/spear/crimsonmoonssemblance/crimsonmoonssemblance.go @@ -0,0 +1,88 @@ +package crimsonmoonssemblance + +import ( + "fmt" + + "github.com/genshinsim/gcsim/pkg/core" + "github.com/genshinsim/gcsim/pkg/core/attacks" + "github.com/genshinsim/gcsim/pkg/core/attributes" + "github.com/genshinsim/gcsim/pkg/core/combat" + "github.com/genshinsim/gcsim/pkg/core/event" + "github.com/genshinsim/gcsim/pkg/core/info" + "github.com/genshinsim/gcsim/pkg/core/keys" + "github.com/genshinsim/gcsim/pkg/core/player/character" + "github.com/genshinsim/gcsim/pkg/modifier" +) + +const ( + icdKey = "crimsonmoonssemblance-icd" + icdDuration = 14 * 60 +) + +func init() { + core.RegisterWeaponFunc(keys.CrimsonMoonsSemblance, NewWeapon) +} + +type Weapon struct { + Index int + core *core.Core + char *character.CharWrapper + refine int +} + +func (w *Weapon) SetIndex(idx int) { w.Index = idx } +func (w *Weapon) Init() error { return nil } + +func NewWeapon(c *core.Core, char *character.CharWrapper, p info.WeaponProfile) (info.Weapon, error) { + w := &Weapon{ + char: char, + core: c, + refine: p.Refine, + } + + c.Events.Subscribe(event.OnEnemyHit, func(args ...interface{}) bool { + ae := args[1].(*combat.AttackEvent) + + if ae.Info.AttackTag != attacks.AttackTagExtra { + return false + } + + if w.core.Player.Active() != w.char.Index { + return false + } + + if w.char.StatusIsActive(icdKey) { + return false + } + + w.char.AddStatus(icdKey, icdDuration, true) + w.char.ModifyHPDebtByRatio(0.25) + + return false + }, fmt.Sprintf("crimsonmoonssemblance-hit-%v", char.Base.Key.String())) + + c.Events.Subscribe(event.OnHPDebt, func(args ...interface{}) bool { + maxhp := w.char.MaxHP() + m := make([]float64, attributes.EndStatType) + + if w.char.CurrentHPDebt() > 0 { + m[attributes.DmgP] += 0.08 + 0.04*float64(w.refine) + } + + if w.char.CurrentHPDebt() >= 0.3*maxhp { + m[attributes.DmgP] += 0.16 + 0.08*float64(w.refine) + } + + w.char.AddStatMod(character.StatMod{ + Base: modifier.NewBaseWithHitlag("crimsonmoonssemblance-bonus", -1), + AffectedStat: attributes.DmgP, + Amount: func() ([]float64, bool) { + return m, true + }, + }) + + return false + }, fmt.Sprintf("crimsonmoonssemblance-hp-debt-%v", char.Base.Key.String())) + + return w, nil +} diff --git a/internal/weapons/spear/crimsonmoonssemblance/crimsonmoonssemblance_gen.go b/internal/weapons/spear/crimsonmoonssemblance/crimsonmoonssemblance_gen.go new file mode 100644 index 0000000000..6d4b32110e --- /dev/null +++ b/internal/weapons/spear/crimsonmoonssemblance/crimsonmoonssemblance_gen.go @@ -0,0 +1,25 @@ +// Code generated by "pipeline"; DO NOT EDIT. +package crimsonmoonssemblance + +import ( + _ "embed" + + "github.com/genshinsim/gcsim/pkg/model" + "google.golang.org/protobuf/encoding/prototext" +) + +//go:embed data_gen.textproto +var pbData []byte +var base *model.WeaponData + +func init() { + base = &model.WeaponData{} + err := prototext.Unmarshal(pbData, base) + if err != nil { + panic(err) + } +} + +func (x *Weapon) Data() *model.WeaponData { + return base +} diff --git a/internal/weapons/spear/crimsonmoonssemblance/data_gen.textproto b/internal/weapons/spear/crimsonmoonssemblance/data_gen.textproto new file mode 100644 index 0000000000..a30c8aaab3 --- /dev/null +++ b/internal/weapons/spear/crimsonmoonssemblance/data_gen.textproto @@ -0,0 +1,63 @@ +id: 13512 +key: "crimsonmoonssemblance" +rarity: 5 +weapon_class: WEAPON_POLE +image_name: "UI_EquipIcon_Pole_BloodMoon" +base_stats: { + base_props: { + prop_type: FIGHT_PROP_BASE_ATTACK + initial_value: 47.537 + curve: GROW_CURVE_ATTACK_302 + } + base_props: { + prop_type: FIGHT_PROP_CRITICAL + initial_value: 0.048 + curve: GROW_CURVE_CRITICAL_301 + } + promo_data: { + max_level: 20 + } + promo_data: { + max_level: 40 + add_props: { + prop_type: FIGHT_PROP_BASE_ATTACK + value: 31.1 + } + } + promo_data: { + max_level: 50 + add_props: { + prop_type: FIGHT_PROP_BASE_ATTACK + value: 62.2 + } + } + promo_data: { + max_level: 60 + add_props: { + prop_type: FIGHT_PROP_BASE_ATTACK + value: 93.4 + } + } + promo_data: { + max_level: 70 + add_props: { + prop_type: FIGHT_PROP_BASE_ATTACK + value: 124.5 + } + } + promo_data: { + max_level: 80 + add_props: { + prop_type: FIGHT_PROP_BASE_ATTACK + value: 155.6 + } + } + promo_data: { + max_level: 90 + add_props: { + prop_type: FIGHT_PROP_BASE_ATTACK + value: 186.7 + } + } +} +name_text_hash_map: 2944936683 diff --git a/pkg/core/keys/weapon.go b/pkg/core/keys/weapon.go index e809665e97..66ae25e2f2 100644 --- a/pkg/core/keys/weapon.go +++ b/pkg/core/keys/weapon.go @@ -59,6 +59,7 @@ var weaponNames = []string{ "coolsteel", "cranesechoingcall", "crescentpike", + "crimsonmoonssemblance", "darkironsword", "deathmatch", "debateclub", @@ -244,6 +245,7 @@ const ( CoolSteel CranesEchoingCall CrescentPike + CrimsonMoonsSemblance DarkIronSword Deathmatch DebateClub diff --git a/pkg/shortcut/weapons.go b/pkg/shortcut/weapons.go index a7dfda32b2..29f709a6ba 100644 --- a/pkg/shortcut/weapons.go +++ b/pkg/shortcut/weapons.go @@ -52,6 +52,8 @@ var WeaponNameToKey = map[string]keys.Weapon{ "crescentpike": keys.CrescentPike, "cpike": keys.CrescentPike, "pike": keys.CrescentPike, + "crimsonmoon": keys.CrimsonMoonsSemblance, + "crimsonmoonssemblance": keys.CrimsonMoonsSemblance, "darkironsword": keys.DarkIronSword, "deathmatch": keys.Deathmatch, "debateclub": keys.DebateClub, diff --git a/pkg/simulation/imports.go b/pkg/simulation/imports.go index d73cce613c..6aaa3df314 100644 --- a/pkg/simulation/imports.go +++ b/pkg/simulation/imports.go @@ -173,6 +173,7 @@ import ( _ "github.com/genshinsim/gcsim/internal/weapons/spear/calamity" _ "github.com/genshinsim/gcsim/internal/weapons/spear/catch" _ "github.com/genshinsim/gcsim/internal/weapons/spear/crescent" + _ "github.com/genshinsim/gcsim/internal/weapons/spear/crimsonmoonssemblance" _ "github.com/genshinsim/gcsim/internal/weapons/spear/deathmatch" _ "github.com/genshinsim/gcsim/internal/weapons/spear/dialoguesofthedesertsages" _ "github.com/genshinsim/gcsim/internal/weapons/spear/dragonbane" diff --git a/ui/packages/docs/docs/reference/weapons/crimsonmoonssemblance.md b/ui/packages/docs/docs/reference/weapons/crimsonmoonssemblance.md new file mode 100644 index 0000000000..b74fc1e057 --- /dev/null +++ b/ui/packages/docs/docs/reference/weapons/crimsonmoonssemblance.md @@ -0,0 +1,25 @@ +--- +title: Crimson Moon's Semblance +--- + +import AoETable from "@site/src/components/AoE/AoETable"; import IssuesTable from "@site/src/components/Issues/IssuesTable"; import NamesList from "@site/src/components/Names/NamesList"; import ParamsTable from "@site/src/components/Params/ParamsTable"; import FieldsTable from "@site/src/components/Fields/FieldsTable"; + +## AoE Data + + + +## Known issues + + + +## Names + + + +## Params + + + +## Fields + + diff --git a/ui/packages/docs/src/components/Names/weapon_data.json b/ui/packages/docs/src/components/Names/weapon_data.json index 6b8362d1c7..45222ba0b6 100644 --- a/ui/packages/docs/src/components/Names/weapon_data.json +++ b/ui/packages/docs/src/components/Names/weapon_data.json @@ -65,6 +65,9 @@ "cpike", "pike" ], + "crimsonmoonssemblance": [ + "crimsonmoon" + ], "darkironsword": [], "deathmatch": [], "debateclub": [], diff --git a/ui/packages/localization/src/locales/names.generated.json b/ui/packages/localization/src/locales/names.generated.json index 3c12a30470..a4e25e018b 100644 --- a/ui/packages/localization/src/locales/names.generated.json +++ b/ui/packages/localization/src/locales/names.generated.json @@ -118,6 +118,7 @@ "coolsteel": "冷刃", "cranesechoingcall": "鹤鸣余音", "crescentpike": "流月针", + "crimsonmoonssemblance": "赤月之形", "darkironsword": "暗铁剑", "deathmatch": "决斗之枪", "debateclub": "以理服人", @@ -718,6 +719,7 @@ "coolsteel": "Cool Steel", "cranesechoingcall": "Crane's Echoing Call", "crescentpike": "Crescent Pike", + "crimsonmoonssemblance": "Crimson Moon's Semblance", "darkironsword": "Dark Iron Sword", "deathmatch": "Deathmatch", "debateclub": "Debate Club", @@ -1318,6 +1320,7 @@ "coolsteel": "Kühle Klinge", "cranesechoingcall": "Widerhallender Ruf des Kranichs", "crescentpike": "Mondpike", + "crimsonmoonssemblance": "Form des scharlachroten Mondes", "darkironsword": "Dunkles Eisenschwert", "deathmatch": "Duelllanze", "debateclub": "Schlagfestes Argument", @@ -1918,6 +1921,7 @@ "coolsteel": "冷刃", "cranesechoingcall": "鶴鳴の余韻", "crescentpike": "流月の針", + "crimsonmoonssemblance": "赤月のシルエット", "darkironsword": "暗鉄剣", "deathmatch": "死闘の槍", "debateclub": "理屈責め", @@ -2517,6 +2521,7 @@ "coolsteel": "차가운 칼날", "cranesechoingcall": "학의 여음", "crescentpike": "유월창", + "crimsonmoonssemblance": "붉은 달의 형상", "darkironsword": "암철검", "deathmatch": "결투의 창", "debateclub": "훌륭한 대화수단", @@ -3117,6 +3122,7 @@ "coolsteel": "Холодное лезвие", "cranesechoingcall": "Звонкий клич журавля", "crescentpike": "Пика полумесяца", + "crimsonmoonssemblance": "Очертания алой луны", "darkironsword": "Тёмный железный меч", "deathmatch": "Смертельный бой", "debateclub": "Дубина переговоров", @@ -3717,6 +3723,7 @@ "coolsteel": "Hoja Fría", "cranesechoingcall": "Reverberación de la Grulla", "crescentpike": "Pica Luna Creciente", + "crimsonmoonssemblance": "Semblante de la Luna Carmesí", "darkironsword": "Espada de Hierro Oscuro", "deathmatch": "Lanza del Duelo", "debateclub": "Garrote del Debate", diff --git a/ui/packages/ui/src/Data/weapon_data.generated.json b/ui/packages/ui/src/Data/weapon_data.generated.json index e4aeb7a6f3..52169fbffa 100644 --- a/ui/packages/ui/src/Data/weapon_data.generated.json +++ b/ui/packages/ui/src/Data/weapon_data.generated.json @@ -208,6 +208,14 @@ "image_name": "UI_EquipIcon_Pole_Exotic", "name_text_hash_map ": "578575283" }, + "crimsonmoonssemblance": { + "id": 13512, + "key": "crimsonmoonssemblance", + "rarity": 5, + "weapon_class": "WEAPON_POLE", + "image_name": "UI_EquipIcon_Pole_BloodMoon", + "name_text_hash_map ": "2944936683" + }, "darkironsword": { "id": 11304, "key": "darkironsword",