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",